c# - 如何为数百个并发连接优化/设计 WCF?

标签 c# wcf wcf-binding tcp

我想使用 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. 我可以使用的最佳绑定(bind)是什么?
    我想通过与我们的服务器建立的连接来回调我的客户端。

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

  3. WCF 是否足以满足我们的情况?我们使用 gprs 作为数据网络。

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

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

最佳答案

回答您的问题:

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

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

  3. 有点。 200 个并发传入连接(如果您的服务是 stateless )是 fairly easy (虽然可能需要一个小的 scale out ),但是 duplex wcf 充其量是复杂的,重要的是 does not scale well - 您要么需要所有客户端的单个服务实例,要么需要一些持久的后备存储来同步客户端回调委托(delegate)(尽管这可以通过 caching 有效地实现)。

  4. 除非您需要根据消息内容动态更改端点、在网络协议(protocol)之间进行转换等,否则我看不到用户需要 wcf-routing在这种情况下,除了作为一种负载平衡器。如果你确实需要横向扩展,你可能最好使用实际的网络负载均衡器。

  5. netTcpBinding 默认使用二进制编码,只要 channel 的两端都是 WCF。这是最optimized在 WCF 中绑定(bind)。

关于c# - 如何为数百个并发连接优化/设计 WCF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093542/

相关文章:

c# - 如何从远程 Windows 计算机检索机器名称?

c# - MVVM模型与WCF有何关系

c# - 自托管 WCF 服务

javascript - WCF 服务接受简单的 JSON 字符串但拒绝带有 400 错误的 JSON 集

.net - 错误 400(错误请求): maxReceivedMessageSize not taken into account for my WCF service

c# - 使用 RestSharp 获取 ExactOnline 的访问 token 时出现 400 错误请求

c# - 读取 Excel 工作表,并在读取后添加到列表框。 C#

c# - 2个计时器,一个落后另一个n秒

.net - 使用 WCF 模拟和 net.tcp 绑定(bind)访问 web.config 设置

c# - 使用没有 certificateValidationMode 的证书时出现 WCF SecurityNegotiationException