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);
.
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();
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>
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 :).
Je ne pense pas que cela ait nécessairement quelque chose à voir avec votre usine.
voir
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.
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"