WCF Binding 的困惑

本文详细介绍了WCF中BasicHttpBinding和WsHttpBinding的区别,包括它们发送数据的方式、适用场景及如何在代码中创建这些绑定对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

背景:我自己通过代理来调用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">

 

 

ContractedBlock.gif ExpandedBlockStart.gif 代码

   
#region Default Bindings
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

转载于:https://www.cnblogs.com/liulf/archive/2010/08/13/1799202.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值