TCP服务作为WCF服务

时间:2014-03-10 11:33:35

标签: wcf ssl tcp wcf-binding tcplistener

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

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

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

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

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

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

  2. 我应该实现哪些特殊功能以允许WCF跟踪/管理我的服务或客户端连接的生命周期?

  3. 干杯。

1 个答案:

答案 0 :(得分:1)

  1. 您需要在示例中为绑定创建安全设置。 This页面是关于WCF绑定的安全设置的MSDN文章。我相信SSLStream包装器应该是处理这个的正确方法 - 我不确定为什么性能如此糟糕。你可以查看this关于慢速SSLStream的问题,因为错误地缓冲了。根据您使用套接字的方式this,由于您对二进制数据进行编码,因此会回答有关性能下降的问题。如果您要发送许多小消息,则此特定设置将非常慢。第二个SO链接建议使用google的proto-buf库。

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

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