如何针对数百个并发连接优化/设计WCF?

时间:2014-09-29 06:13:51

标签: c# wcf wcf-binding tcp-ip

我想使用WCF开发一个TCP服务器应用程序,它必须是高度可扩展的高性能服务器,可以处理至少200个并发连接:通过GPRS从我的客户端获取原始数据。

我的数据包括:

public class  RawData
{
    public string deviceID { get; set; }
    public string timeStamp { get; set; }
    public string messageType { get; set; }
    public string driverId { get; set; }
    public string senosrs { get; set; }
    public string startStatus { get; set; }
    public string x { get; set; }
    public string y { get; set; }
    public string course { get; set; }
    public string speed { get; set; }
    public string satCount { get; set; }
    public string signal { get; set; }
    public string message { get; set; }
}

我的问题是:

  1. 我可以使用的最佳装订是什么?
    我想通过与我们服务器的连接来回调我的客户。

  2. 如何检查wcf数据包大小?
    我使用过这个教程: http://zamd.net/2008/08/15/calculating-wcf-message-size/ 我的包长了500!是字节还是其他单位?

  3. WCF对我们的情况是否足够好?我们使用gprs作为DataNetwork。

  4. 在这种情况下是否需要实施路由服务?

  5. 此问题的最佳编码是什么?最好的压缩*速度。

1 个答案:

答案 0 :(得分:1)

回答你的问题:

  1. netTcpBinding - 它是性能最高的绑定,因为它基本上是原始套接字。它还支持duplex

  2. 如果您需要一次性而非生产监控,请尝试配置wcf tracing。这可以使用该频道绝对记录每条消息。

  3. 有点儿。 200个并发传入连接(如果您的服务为stateless)为fairly easy(虽然可能需要较小的scale out),但双工 wcf是复杂,最重要的是does not scale well - 您需要为所有客户端提供单个服务实例,或者您需要一些持久性后备存储来同步客户端回调代理(尽管可以使用caching高效实现这一点)

  4. 除非您需要根据邮件内容动态更改端点,在网络协议等之间进行转换,否则在此方案中我无法看到用户wcf-routing的任何需求,除了作为一种负载均衡器。如果您确实需要扩展,那么使用实际的网络负载均衡器可能会更好。

  5. netTcpBinding默认使用二进制编码,只要通道的两端都是WCF即可。这是WCF中optimized绑定最多的。