背景:我自己通过代理来调用WCF,让其他程序都通过代理来访问
错误:“服务 http://liulf.9588.com/Service1.svc 不支持内容类型 text/xml; charset=utf-8。客户端和服务绑定可能不匹配。”
原因:看一下WCF 工程里面
<endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1">
<endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1">
看看节点: binding 是什么?其中: wsHttpBinding 和 basicHttpBinding,
区别:
原文地址:Difference between BasicHttpBinding and WsHttpBinding
1、BasicHttpBinding发送的是明文数据,而WsHttpBinding发送的是加密和更加安全的数据
2、么时候使用BasicHttpBinding,什么时候使用WsHttpBinding
如果你希望有向后兼容的能力,并且支持更多的客户端,你可以选择basicHttpBinding,如果你确定你的客户端使用的是.NET 3.0甚至更高的话,你可以选择
3、后台不用的绑定方式如果自己创建绑定对像那么:
示例代码 :
WSHttpBinding 和 BasicHttpBinding 类对应web.config 用什么
<endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1">
<endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1">


static BasicHttpBinding basicHttpBinding = null ;
public static BasicHttpBinding DefaultBasicHttpBinding
{
get
{
if (basicHttpBinding == null )
{
basicHttpBinding = new BasicHttpBinding();
basicHttpBinding.CloseTimeout = new TimeSpan( 0 , 1 , 0 );
basicHttpBinding.OpenTimeout = new TimeSpan( 0 , 1 , 0 );
basicHttpBinding.ReceiveTimeout = new TimeSpan( 0 , 10 , 0 );
basicHttpBinding.SendTimeout = new TimeSpan( 0 , 1 , 0 );
basicHttpBinding.AllowCookies = false ;
basicHttpBinding.BypassProxyOnLocal = false ;
basicHttpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
basicHttpBinding.MaxBufferSize = 655360 ;
basicHttpBinding.MaxBufferPoolSize = 5242880 ;
basicHttpBinding.MaxReceivedMessageSize = 655360 ;
basicHttpBinding.MessageEncoding = WSMessageEncoding.Text;
basicHttpBinding.TextEncoding = Encoding.UTF8;
basicHttpBinding.TransferMode = TransferMode.Buffered;
basicHttpBinding.UseDefaultWebProxy = true ;
basicHttpBinding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
basicHttpBinding.ReaderQuotas.MaxDepth = 32 ;
basicHttpBinding.ReaderQuotas.MaxStringContentLength = 8192 ;
basicHttpBinding.ReaderQuotas.MaxArrayLength = 16384 ;
basicHttpBinding.ReaderQuotas.MaxBytesPerRead = 4096 ;
basicHttpBinding.ReaderQuotas.MaxNameTableCharCount = 16384 ;
basicHttpBinding.Security.Mode = BasicHttpSecurityMode.None;
basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
basicHttpBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
basicHttpBinding.Security.Transport.Realm = string .Empty;
basicHttpBinding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
basicHttpBinding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default;
}
return basicHttpBinding;
}
}
static NetTcpBinding netTcpBinding = null ;
public static NetTcpBinding DefaultNetTcpBinding
{
get
{
if (netTcpBinding == null )
{
netTcpBinding = new NetTcpBinding();
netTcpBinding.CloseTimeout = new TimeSpan( 0 , 1 , 0 );
netTcpBinding.OpenTimeout = new TimeSpan( 0 , 1 , 0 );
netTcpBinding.ReceiveTimeout = new TimeSpan( 0 , 10 , 0 );
netTcpBinding.SendTimeout = new TimeSpan( 0 , 1 , 0 );
netTcpBinding.TransactionFlow = false ;
netTcpBinding.TransferMode = TransferMode.Buffered;
netTcpBinding.TransactionProtocol = TransactionProtocol.OleTransactions;
netTcpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
netTcpBinding.ListenBacklog = 10 ;
netTcpBinding.MaxBufferPoolSize = 5242880 ;
netTcpBinding.MaxBufferSize = 655360 ;
netTcpBinding.MaxConnections = 24 ;
netTcpBinding.MaxReceivedMessageSize = 655360 ;
netTcpBinding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
netTcpBinding.ReaderQuotas.MaxDepth = 32 ;
netTcpBinding.ReaderQuotas.MaxStringContentLength = 8192 ;
netTcpBinding.ReaderQuotas.MaxArrayLength = 16384 ;
netTcpBinding.ReaderQuotas.MaxBytesPerRead = 4096 ;
netTcpBinding.ReaderQuotas.MaxNameTableCharCount = 16384 ;
netTcpBinding.ReliableSession.Ordered = true ;
netTcpBinding.ReliableSession.InactivityTimeout = new TimeSpan( 0 , 10 , 0 );
netTcpBinding.ReliableSession.Enabled = false ;
netTcpBinding.Security.Mode = SecurityMode.None;
netTcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
netTcpBinding.Security.Transport.ProtectionLevel = System.Net.Security.ProtectionLevel.EncryptAndSign;
netTcpBinding.Security.Message.ClientCredentialType = MessageCredentialType.Windows;
}
return netTcpBinding;
}
}
public static WSHttpBinding DefaultWSHttpBinding
{
get
{
throw new NotImplementedException();
}
}
public static NetMsmqBinding DefaultNetMsmqBinding
{
get
{
throw new NotImplementedException();
}
}
static WSDualHttpBinding wsDualHttpBinding = null ;
public static WSDualHttpBinding DefaultWSDualHttpBinding
{
get
{
if (wsDualHttpBinding == null )
{
wsDualHttpBinding = new WSDualHttpBinding();
wsDualHttpBinding.CloseTimeout = new TimeSpan( 0 , 10 , 0 );
wsDualHttpBinding.OpenTimeout = new TimeSpan( 0 , 5 , 0 );
wsDualHttpBinding.ReceiveTimeout = new TimeSpan( 0 , 10 , 0 );
wsDualHttpBinding.SendTimeout = new TimeSpan( 0 , 5 , 0 );
wsDualHttpBinding.BypassProxyOnLocal = false ;
wsDualHttpBinding.TransactionFlow = false ;
wsDualHttpBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
wsDualHttpBinding.MaxBufferPoolSize = 524288 ;
wsDualHttpBinding.MaxReceivedMessageSize = 65536 ;
wsDualHttpBinding.MessageEncoding = WSMessageEncoding.Text;
wsDualHttpBinding.TextEncoding = Encoding.UTF8;
wsDualHttpBinding.UseDefaultWebProxy = true ;
wsDualHttpBinding.ReaderQuotas = new System.Xml.XmlDictionaryReaderQuotas();
wsDualHttpBinding.ReaderQuotas.MaxDepth = 32 ;
wsDualHttpBinding.ReaderQuotas.MaxStringContentLength = 8192 ;
wsDualHttpBinding.ReaderQuotas.MaxArrayLength = 16384 ;
wsDualHttpBinding.ReaderQuotas.MaxBytesPerRead = 4096 ;
wsDualHttpBinding.ReaderQuotas.MaxNameTableCharCount = 16384 ;
wsDualHttpBinding.ReliableSession.InactivityTimeout = new TimeSpan( 0 , 10 , 0 );
}
return wsDualHttpBinding;
}
}
#endregion
参考 :http://www.cnblogs.com/virusswb/archive/2010/02/21/1670225.html