wcf - TCP 服务作为 WCF 服务

标签 wcf ssl tcp wcf-binding tcplistener

我有一个基于 TCP 的服务,我想通过 WCF 公开。服务 API 类似于 TcpListener 类(实际上是基于它),接受 TCP 连接作为客户端,并通过客户端类发送和接收原始 Stream 派生对象。我想通过利用 WCF 序列化创建一个允许发送和接收对象的 WCF 包装器。

基本合约只包含两个操作,发送和接收,格式通常像 JSON 一样是无模式的,但客户端可以在连接时指定协议(protocol),所以我想准备好接受其中的一些。

它应该也适用于 SSL。目前,当我必须使用 SSL 时,我必须将 TcpClient.GetStream() 包装在 SslStream 中,但性能非常差。我想在没有这种 hack 的情况下使用我的服务,并通过执行以下操作来使用 WCF SSL:

            <binding name="MyBinding">
               <security mode="Transport">
                 <transport clientCredentialType="Windows" />
                </security>
            </binding>   

到目前为止,这些是我的疑惑:

  1. 我需要创建什么?自定义传输或自定义绑定(bind)?

  2. 我应该实现什么特别的东西来允许 WCF 跟踪/管理我的服务或客户端连接的生命周期?

干杯。

最佳答案

  1. 您需要像示例中那样为您的绑定(bind)创建安全设置。 This页面是关于 WCF 绑定(bind)安全设置的 MSDN 文章。我相信 SSLStream 包装器应该是处理这个问题的正确方法——我不确定为什么性能如此糟糕。你可以看看this由于缓冲不正确,所以关于慢 SSLStream 的问题。取决于您如何使用套接字 this由于您对二进制数据的编码方式,答案谈到了性能下降。如果您要发送许多小消息,此特定设置将非常慢。第二个 SO 链接建议使用类似谷歌的 proto-buf 之类的东西。库。

  2. 跟踪/管理生命周期是什么意思?你的意思是超时过时的连接?我相信 TCPListener 已经处理过了。

我知道我可能没有回答你的问题,但如果没有更多细节,很难确定缓慢的确切原因。

关于wcf - TCP 服务作为 WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22298992/

相关文章:

facebook - 10 月 1 日到来,我可以在启用 SSL 的 FB 应用程序中使用 iframe 非 SSL 站点吗?

tcp - dbus-发送到远程机器

wcf - 确定来自针对 Azure 的 FirstOrDefault 的 WCF 数据服务 LINQ 查询的请求 Uri,而不执行它?

ssl - wget ssl 警报握手失败

ssl - 通过 udp 的事件目录 LDAP SSL

c++ - TCP - 如何关闭在线程内创建的客户端 -C++

c# - 为什么异步客户端 TCP 操作的性能似乎比同步 TCP 操作差?

c# - 请求中的错误 SOAP 操作 header 。为什么?

c# - 无法通过浏览器访问 WCF 服务

c# - 使用 Web 代理的 MetadataExchangeClient