C# WCF中的CustomBinding中的客户端绑定和服务绑定可能不匹配

C# WCF中的CustomBinding中的客户端绑定和服务绑定可能不匹配,c#,wcf,C#,Wcf,我正在使用以下代码连接WCF服务。但我得到以下错误 内容类型应用程序/soap+xml;服务不支持字符集=utf-8。客户端和服务绑定可能不匹配。 代码: var address=新端点地址(“http://demo.ca/LicenseWebService.svc"); var transport=新的HttpTransportBindingElement(); transport.KeepAliveEnabled=false; var绑定=新的CustomBinding(传输); 工厂=新渠

我正在使用以下代码连接WCF服务。但我得到以下错误

内容类型应用程序/soap+xml;服务不支持字符集=utf-8。客户端和服务绑定可能不匹配。

代码:

var address=新端点地址(“http://demo.ca/LicenseWebService.svc");
var transport=新的HttpTransportBindingElement();
transport.KeepAliveEnabled=false;
var绑定=新的CustomBinding(传输);
工厂=新渠道工厂(绑定,地址);
channel=factory.CreateChannel();
WCF服务的网络配置:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2"/>
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
        <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
  </system.serviceModel>
</configuration>

以前我使用的是BasicHttpBinding,它可以正常工作

BasicHttpBinding myBinding = new BasicHttpBinding();
myBinding.Name = "BasicHttpBinding_LicenseWebIService";
myBinding.Security.Mode = BasicHttpSecurityMode.None;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
myBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
EndpointAddress endPointAddress = new EndpointAddress("http://demo.ca/LicenseWebService.svc");
factory = new ChannelFactory<LicenseWebIService>(myBinding, endPointAddress);
channel = factory.CreateChannel();
BasicHttpBinding myBinding=new BasicHttpBinding();
myBinding.Name=“BasicHttpBinding\u LicenseWebIService”;
myBinding.Security.Mode=BasicHttpSecurityMode.None;
myBinding.Security.Transport.ClientCredentialType=HttpClientCredentialType.None;
myBinding.Security.Transport.ProxyCredentialType=HttpProxyCredentialType.None;
myBinding.Security.Message.ClientCredentialType=BasicHttpMessageCredentialType.UserName;
EndpointAddress EndpointAddress=新的EndpointAddress(“http://demo.ca/LicenseWebService.svc");
工厂=新的ChannelFactory(myBinding,endPointAddress);
channel=factory.CreateChannel();
BasicHttpBinding的代码工作正常。但是我需要设置
KeepAlive=false根据Microsoft对我的代码的审查。因此,我尝试用
CustomBinding
替换。现在我得到上面的错误不匹配

有人能给我建议一下CustomBinding的上述问题的解决方案吗


但是,如果有人能告诉我如何在BasicHttpBinding中设置
KeepAlive=false也可以。

CustomBinding通常至少需要两个元素:传输(您有)和消息编码(您没有,WCF试图从传输中猜出)。 尝试显式添加消息编码部分(您将能够指定编码):

var address=新端点地址(“http://demo.ca/LicenseWebService.svc");
var transport=新的HttpTransportBindingElement();
transport.KeepAliveEnabled=false;
var messageEncoding=newtextmessageencodingbindingElement(MessageVersion.Soap11,System.Text.Encoding.UTF8);
var binding=newcustombinding(new[]{messageEncoding,transport});
工厂=新渠道工厂(绑定,地址);
channel=factory.CreateChannel();

谢谢。我仍然需要设置配置。
BasicHttpBinding myBinding = new BasicHttpBinding();
myBinding.Name = "BasicHttpBinding_LicenseWebIService";
myBinding.Security.Mode = BasicHttpSecurityMode.None;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
myBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
myBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
EndpointAddress endPointAddress = new EndpointAddress("http://demo.ca/LicenseWebService.svc");
factory = new ChannelFactory<LicenseWebIService>(myBinding, endPointAddress);
channel = factory.CreateChannel();
var address = new EndpointAddress("http://demo.ca/LicenseWebService.svc");
var transport = new HttpTransportBindingElement();
transport.KeepAliveEnabled = false;
var messageEncoding = new TextMessageEncodingBindingElement(MessageVersion.Soap11, System.Text.Encoding.UTF8);
var binding = new CustomBinding(new [] { messageEncoding, transport });
factory = new ChannelFactory<LicenseWebIService>(binding, address);
channel = factory.CreateChannel();