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

ElH*_*aix 41 c# wcf messages channelfactory

我有一个托管的WCF服务,我为其创建了一个自定义工厂,这样就可以使用多个主机头:

/// <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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我很确定我的配置文件现在在客户端和服务器上都是正确的(可以在这里看到).

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

此工厂已启用手动寻址,因此必须预先发送所有发送的消息.

public string GetData(int value) {
    return base.Channel.GetData(value);
}
Run Code Online (Sandbox Code Playgroud)

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

ben*_*wey 62

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

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

  • 上面的答案根本没有帮助.但你的解决方案有效.谢谢. (3认同)

小智 27

我像往常一样添加了服务引用并得到了这个错误.事实证明我所要做的就是修改客户端配置以使用具有指定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>
Run Code Online (Sandbox Code Playgroud)

  • 嗯......只要我加上那个,我就得到`(405)Method Not Allowed`. (3认同)