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" />
因为这对我来说是一个相对较新的领域,只是解释为什么这些错误会出现在我的正确方向上:)。
我不认为这与你的工厂有什么关系。
看到
或者是前几个Bing的“manualaddressing”中的其他人。 这听起来像使用的绑定是不兼容的堆栈/消息传递逻辑的其他部分。
是的,杰森·马德尔的回答也为我工作,我的约束力并没有指向一个行为。 所以在绑定我添加: behaviorConfiguration="webhttp"