我需要幫助下面NetTcpBinding的轉換爲等效的CustomBinding:需要幫助轉換WCF NetTcpBinding的到CustomBinding
<bindings>
<netTcpBinding>
<binding name="secureNetTcp" openTimeout="00:00:25" closeTimeout="00:00:27" receiveTimeout="00:10:10" sendTimeout="00:01:00"
listenBacklog="50" maxBufferPoolSize="2097152" maxBufferSize="2097152" maxConnections="50" maxReceivedMessageSize="2097152">
<readerQuotas maxArrayLength="2097152" />
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="true" />
<security mode="TransportWithMessageCredential">
<message algorithmSuite="Basic256Sha256" />
</security>
</binding>
</netTcpBinding>
</bindings>
我大多是用自定義綁定的安全部分struggeling,因爲我無法捉摸所有不同的設置。並且所有東西都被命名爲不同(與netTcpBinding參數相比)。
如果有必要,我會提供以下信息,以及:
服務端點必須通過serviceBehavior連接到它的證書。
在我的代碼中,我創建代理時提供了一個用戶名/密碼(服務行爲有<userNameAuthentication userNamePasswordValidationMode="Windows" />
serviceCredentials;對於netTcpBinding,WCF配置編輯器顯示ClientCredentialType=Windows
,我猜是默認值)。
更新:
我已經找到了我的主要問題潛在的解決方案 - 提高ChannelInitilizationTimeout - 而無需創建一個CustomBinding。我給大家介紹這個,櫃面有人stumbels在這個線程同時googeling ...
我所做的就是創建一個從NetTcpBinding的繼承的自定義類,並在它的構造函數中使用反射來設置ChannelInitilizationTimeout財產。因此保持與NetTcpBinding的完全兼容性。
這裏是我的自定義類的代碼:
public class MyNetTcpBinding : NetTcpBinding
{
public MyNetTcpBinding()
{
var fi = typeof(NetTcpBinding).GetField("transport", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var val = (System.ServiceModel.Channels.TcpTransportBindingElement)fi.GetValue(this);
val.ChannelInitializationTimeout = TimeSpan.FromSeconds(10);
}
}
public class MyBindingElement : NetTcpBindingElement
{
protected override Type BindingElementType
{
get { return typeof(MyNetTcpBinding); }
}
}
public class MyBindingElementCollection : StandardBindingCollectionElement<MyNetTcpBinding, MyBindingElement>
{
}
編譯這個類(我創建了這個類的一個單獨的DLL項目)後,我用WCF配置編輯器(下左窗格中的「配置」 - >高級 - >擴展 - >綁定擴展 - >新 - >給一個名字,例如「MyNetTcp」並指向dll文件)將我的類添加爲綁定的擴展。
然後在WCF app.config中只需更換netTcpBinding
與MyNetTcp
(總共有三個參考;一個在<service><endpoint binding="netTcpBinding"></endpoint></service>;
另外兩個XML標記<bindings><netTcpBinding></netTcpBinding></bindings>
下)。
我將離開這個問題,以防有人開想給一個合適的回答原來的問題...
不知道爲什麼任何默認綁定並不能滿足您的需求,但我想看看http://msdn.microsoft.com/en-us/library/ms731172.aspx這SOF http://stackoverflow.com/questions/2235931/wcf-how-to-create-programatically-custom-binding-with-binary-encoding-over-htt – 2012-02-17 23:24:40
@Bryan - 我需要增加ChannelInitilizationTimeout屬性,但那可以只能在CustomBinding中完成。(有時我的客戶端在打開一個服務通道時會遇到異常,跟蹤顯示由於超時(默認5秒)發生了Socket Initilization異常。我的服務器(win 2003 R2,.net4,四核, 4GB內存)不能處理只有30個客戶超出我...)如果我可以以某種方式設置屬性在C#代碼,例如。同時創建WCF服務,這也會讓我滿意,但我還沒有找到通過代碼訪問通道綁定的方法(我只能添加新的)。 – Marko 2012-02-18 08:23:32
是的,我很確定你不能通過代碼訪問該屬性。我相信你已經閱讀過這個http://blogs.msdn.com/b/andreal/archive/2009/12/04/wcf-nettcpbinding-what-to-do-if-the-socket-did-not -complete-of-allotted-timeout-of.aspx和http://msdn.microsoft.com/en-us/library/ms751528.aspx以及http://msdn.microsoft.com/en-us /library/ms731078.aspx。 – 2012-02-18 13:07:34