如何将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, 复合双工,单向,流安全,消息编码,传输。
任何人都可以帮助我解决这个问题吗?
从错误消息:"...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>