【问题标题】:TCP service as WCF serviceTCP 服务作为 WCF 服务
【发布时间】:2023-03-26 13:45:01
【问题描述】:

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

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

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

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

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

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

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

干杯。

【问题讨论】:

  • 也许你应该把这个问题分开..
  • 对,它太宽了。
  • 你看过提供的 NetTcpBinding 了吗?从技术上讲,绑定只与 .NET 客户端和服务兼容,但也许您可以编写一个自定义绑定,在内部使用它来支持非 .NET 客户端。您可以创建具有 Stream 属性的数据协定类,并修改 NetTcpBinding 的 Web 配置以启用流请求支持。 NetTcpBinding 也像上面的 sn-p 一样支持 SSL。
  • 我会看看,似乎是个好主意。

标签: wcf ssl tcp wcf-binding tcplistener


【解决方案1】:
  1. 您需要在绑定上创建安全设置,如您的示例中所示。 This 页面是关于 WCF 绑定的安全设置的 MSDN 文章。我相信 SSLStream 包装器应该是处理这个问题的正确方法 - 我不确定为什么性能如此糟糕。您可以查看this SO question about slow SSLStream 因为缓冲不正确。根据您使用套接字的方式 this 答案谈到性能缓慢是因为您编码二进制数据的方式。如果您要发送许多小消息,则此特定设置将非常慢。第二个 SO 链接建议使用类似 google 的 proto-buf 库。

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

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

【讨论】:

  • 真正的问题不是 SSL 慢,而是如何从头开始创建 TCP 绑定或传输。
  • 让我澄清一下我的意思 - 您可以使用粘贴到问题中的设置将 WCF 服务配置为具有传输安全性。这将使 WCF 服务处理所有 SSL 内容。您将需要使用 MSDN 上有关 WCF 绑定和安全设置的链接文档来准确查看您想要的内容。您也可以按照您在问题中尝试的方式使用 SSLStream 。在这种情况下,我试图在答案中解释缓慢的原因可能有很多。
猜你喜欢
  • 2012-04-28
  • 2013-04-11
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多