如何将netTcpBinding转换为customBinding

本文关键字:customBinding 转换 netTcpBinding | 更新日期: 2023-09-27 17:55:16

我正在尝试将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>

我创建了一个自定义双工绑定

<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>

但是当我运行时,发生了以下异常:

绑定

"自定义双工绑定"不支持创建任何通道类型。 这通常表示自定义绑定中的绑定元素具有 堆叠不正确或顺序错误。传输是 在堆栈底部是必需的。推荐的订单 BindingElements 是: TransactionFlow, ReliableSession, Security, 复合双工,单向,流安全,消息编码,传输。

任何人都可以帮助我解决这个问题吗?

如何将netTcpBinding转换为customBinding

从错误消息:"...StreamSecurity, MessageEncoding..."

在你的绑定结构中,你<<binaryMessageEncoding>后跟<sslStreamSecurity>。 这些需要切换:

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

根据 MSDN 上的自定义绑定,以下是所需的顺序

  • 交易流程
  • 可靠的会话
  • 安全
  • 复合双工
  • 单程
  • 流安全
  • 消息编码
  • 运输

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

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

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