如何将netTcpBinding转换为customBinding?

时间:2014-03-31 14:49:17

标签: c# wcf wcf-binding nettcpbinding

我正在尝试将 netTcpBinding 转换为 customBinding

这是 netTcpBinding 配置:

<netTcpBinding>
    <binding name="DuplexBinding" sendTimeout="00:00:30" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
      <reliableSession enabled="true" ordered="true"/>
      <security mode="Message">
        <message clientCredentialType="UserName"/>
      </security>                    
    </binding>
</netTcpBinding>

我创建了 CustomDuplexBinding

<customBinding>
    <binding name="CustomDuplexBinding" sendTimeout="00:00:30">
      <transactionFlow />
      <reliableSession ordered="true"/>
      <security authenticationMode="UserNameForCertificate" enableUnsecuredResponse="true">
        <secureConversationBootstrap authenticationMode="UserNameForCertificate" />
      </security>
      <compositeDuplex />
      <oneWay />
      <binaryMessageEncoding>
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
                      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
      </binaryMessageEncoding>
      <sslStreamSecurity requireClientCertificate="false"/>
      <tcpTransport maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"/>
    </binding>
</customBinding>

但是当我跑步时,发生了以下异常:

  

绑定&#39; CustomDuplexBinding&#39;不支持创建任何渠道类型。   这通常表明CustomBinding中的BindingElements具有   错误地堆叠或错误的顺序。运输是   在堆栈底部需要。推荐的订单   BindingElements是:TransactionFlow,ReliableSession,Security,   CompositeDuplex,OneWay,StreamSecurity,MessageEncoding,Transport。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

从错误消息:&#34; ... StreamSecurity,MessageEncoding ......&#34;

在约束性配置中,您有<<binaryMessageEncoding>后跟<sslStreamSecurity>。这些需要切换:

<sslStreamSecurity requireClientCertificate="false"/>
<binaryMessageEncoding>
  <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
                maxArrayLength="2147483647" maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647"/>
</binaryMessageEncoding>

MSDN上的每Custom Bindings,以下是必需的订单

  • 交易流程
  • 可靠的会议
  • 安全
  • 复合双面
  • OneWay
  • 流安全
  • 邮件编码
  • 运输

只需要最后两个(消息编码和传输);其余的都是可选的。

答案 1 :(得分:1)

我一直遇到同样的问题。尽管流安全性和消息编码元素在原始帖子中是向后的,但即使它们处于正确的顺序,也会发生相同的错误。对我来说,问题在于在安全元素上使用authenticationMode。我的nettcp安全元素与原始海报(使用UserName身份验证的邮件安全性)相同。使用这个工作:

<security authenticationMode="SecureConversation">
   <secureConversationBootstrap authenticationMode="UserNameForSslNegotiated" />
</security>