Erreur WCF: l'adressage manuel est activé sur cette usine, de sorte que tous les messages envoyés doivent être pré-adressés

j'ai un service hébergé de la WCF pour lequel j'ai créé une usine personnalisée, pour que cela fonctionne avec plusieurs têtes d'hôtes:

/// <summary>
/// Required for hosting where multiple host headers are present
/// </summary>
public class MultipleHostServiceFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        List<Uri> addresses = new List<Uri>();
        addresses.Add(baseAddresses[0]);
        return base.CreateServiceHost(serviceType, addresses.ToArray());
    }
}

je suis presque sûr que mes fichiers de configuration sont maintenant corrects, tant sur le client que sur le serveur ( peut être vu ici ).

l'erreur que j'obtiens semble liée à l'usine:

adressage manuel est activé sur cette usine, de sorte que tous les messages envoyés doivent être pré-adressée.

public string GetData(int value) {
    return base.Channel.GetData(value);
}

L'erreur se produit à la ligne return base.Channel.GetData(value); .

40
demandé sur Ivar 2009-11-25 19:16:57

5 réponses

j'ai fait l'expérience de cette erreur et le problème a été résolu en ajoutant le comportement WebHttpBehavior (ligne 2 ci-dessous):

var factory = new ChannelFactory<IService>(new WebHttpBinding(), uri);
factory.Endpoint.Behaviors.Add(new WebHttpBehavior());
var proxy = factory.CreateChannel();
58
répondu bendewey 2010-04-28 14:29:51

j'ai ajouté une référence de service comme d'habitude et j'ai eu cette erreur. Il s'avère que tout ce que j'avais à faire était de modifier la config client pour utiliser une config endpoint avec un comportement spécifiant webhttp

<client>
  <endpoint address="http://localhost:9000/GeoConverterService/GeoConverterService.svc"
            binding="webHttpBinding" 
            contract="GeoConverter.IGeoConverterService" 
            behaviorConfiguration="webhttp"/>
</client>

<behaviors>
  <endpointBehaviors>
    <behavior name="webhttp">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>

27
répondu jason mardell 2015-02-15 18:52:35

donc c'est enfin terminé!

Brian-merci pour vos conseils à ce sujet. Les liaisons étaient mal alignées par le client et le serveur, et j'ai finalement fini par aller avec ce qui suit dans les deux:

  <basicHttpBinding>
    <binding name="TransportSecurity">
      <security mode="Transport">
        <transport clientCredentialType="None"/>
      </security>
    </binding>
  </basicHttpBinding> 

... et de définir leurs attributs de liaison et de configuration des liens en conséquence:

   <endpoint binding="basicHttpBinding" 
             bindingConfiguration="TransportSecurity"
             contract="ServiceReference1.IService" 
             name="WebHttpBinding_IService" 
             address="https://mysslserver.com/Service.svc" />

Puisqu'il s'agit d'un territoire relativement nouveau pour moi, juste l'explication de pourquoi ces erreurs ont été sauter jusqu'à me conduire dans le bon sens :).

2
répondu ElHaix 2015-02-15 19:09:26

Je ne pense pas que cela ait nécessairement quelque chose à voir avec votre usine.

voir

http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.transportbindingelement.manualaddressing.aspx

ou d'autres parmi les premiers Bing hits pour "manualaddressing". Il semble que la liaison utilisée soit incompatible avec une autre partie de la logique stack/messaging.

1
répondu Brian 2009-11-25 16:26:08

Oui la réponse de Jason Mardell a fonctionné pour moi aussi, ma reliure n'indiquait pas un comportement. ainsi dans la reliure j'ai ajouté: behaviorConfiguration="webhttp"

0
répondu real_yggdrasil 2013-12-23 10:53:42