J'ai un service WCF hébergé pour lequel j'ai créé une fabrique personnalisée, afin que cela fonctionne avec plusieurs en-têtes d'hôte:
/// <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, à la fois sur le client et sur le serveur ( peut être vu ici ).
L'erreur que je reçois semble être liée à l'usine:
L'adressage manuel est activé sur cette usine, donc tous les messages envoyés doivent être pré-adressés.
public string GetData(int value) {
return base.Channel.GetData(value);
}
L'erreur se produit à la ligne return base.Channel.GetData(value);
.
J'ai rencontré cette erreur et le problème a été résolu en ajoutant 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 obtenu cette erreur. Il s'avère que tout ce que j'avais à faire était de modifier la configuration du client pour utiliser une configuration de point de terminaison 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, cela a finalement pris fin!
Brian - merci pour vos conseils à ce sujet. Les liaisons étaient mal alignées b/t le client et le serveur, et j'ai finalement fini par aller avec les éléments suivants dans les deux:
<basicHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</basicHttpBinding>
... et définissant leurs attributs de liaison de noeud final et bindingConfiguration en conséquence:
<endpoint binding="basicHttpBinding"
bindingConfiguration="TransportSecurity"
contract="ServiceReference1.IService"
name="WebHttpBinding_IService"
address="https://mysslserver.com/Service.svc" />
Étant donné que c'est un gazon relativement nouveau pour moi, l'explication de la raison pour laquelle ces erreurs se sont produites m'a conduit dans la bonne direction :).
Je ne pense pas que cela ait nécessairement quelque chose à voir avec votre usine.
Voir
ou d'autres parmi les premiers hits Bing pour "adressage manuel". Il semble que la liaison utilisée soit incompatible avec une autre partie de la logique de pile/messagerie.