C# WCF中的CustomBinding中的客户端绑定和服务绑定可能不匹配
我正在使用以下代码连接WCF服务。但我得到以下错误 内容类型应用程序/soap+xml;服务不支持字符集=utf-8。客户端和服务绑定可能不匹配。 代码: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(传输); 工厂=新渠
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();