WCF错误:在此工厂启用手动寻址,因此所有发送的消息都必须预先寻址

我有一个托pipeWCF服务,我创build了一个自定义工厂,以便这可以与多个主机标头一起使用:

/// <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()); } } 

我很确定我的configuration文件现在是正确的,在客户端和服务器( 可以在这里看到 )。

我得到的错误似乎与工厂有关:

手动寻址在此工厂启用,所有发送的邮件必须预先寻址。

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

错误发生在线return base.Channel.GetData(value);

我遇到这个错误,并通过添加WebHttpBehavior(下面的第2行)解决了问题:

 var factory = new ChannelFactory<IService>(new WebHttpBinding(), uri); factory.Endpoint.Behaviors.Add(new WebHttpBehavior()); var proxy = factory.CreateChannel(); 

我照例添加了一个服务引用,并得到这个错误。 事实certificate,我所要做的就是修改客户端configuration,使用具有行为指定webhttp的端点configuration

 <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> 

所以这终于结束了!

布赖恩 – 感谢您的指导。 绑定在客户端和服务器之间是错误alignment的,最后我在两个地方都做了以下的事情:

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

…并相应地设置它们的端点绑定和bindingConfiguration属性:

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

因为这对我来说是一个相对较新的领域,只是解释为什么这些错误会出现在我的正确方向上:)。

我不认为这与你的工厂有什么关系。

看到

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

或者是前几个Bing的“manualaddressing”中的其他人。 这听起来像使用的绑定是不兼容的堆栈/消息传递逻辑的其他部分。

是的,杰森·马德尔的回答也为我工作,我的约束力并没有指向一个行为。 所以在绑定我添加: behaviorConfiguration="webhttp"