使用实时数据提高WCF服务的性能

时间:2010-09-14 20:02:37

标签: wcf performance

在我的应用程序中,我需要将实时事件的通知从服务器推送到客户端。要传递的数据量非常小,主要是Id。同时监听的客户端数量大约为100,我可能每2到3秒发布一次通知。服务器和客户端都使用.Net和WCF构建。

鉴于这些要求,我构建了一组WCF服务,这些服务将在负载平衡的服务器集群上运行。实例上下文模式是Per Call,不需要会话等。

我目前正在使用BasicHttpBinding。 TCP绑定会更好吗?它是在IIS 5还是6上运行?如果不是为什么?

序列化的哪些配置最有效?

为了确保获得最佳性能,我需要做些什么?

修改 - 根据部分回复添加更多信息 -

我使用手动托管在客户端进程中托管一个小型WCF服务。服务器只是在每个客户端上调用此服务以将数据推送到所有客户端。

2 个答案:

答案 0 :(得分:2)

首先,您是否考虑过使用消息传递来实现您想要实现的目标?

在回答TCP绑定工作比BasicHttpBinding更好 - 几乎肯定是的。如果您想使用TCP,则不能将IIS- look into WAS与Windows Server 2008一起使用。如果您遇到Windows Server 2003,那么您将不得不在Windows服务中托管。

您通过选择每个呼叫做出了一个不错的选择 - 这是创建可扩展WCF服务的首选实例管理模式。

编辑:

现在您已经更新了问题,如果您想坚持使用WCF,我建议您查看IDesign的Pub/Sub framework。我还会查看Pub/Sub with MSMQ in WCF以及Tibco RV等“Vanilla”产品。

答案 1 :(得分:0)

如果您需要将数据从服务推送到客户端,则需要会话,并且需要双工绑定 - NetTcpBinding或WSDualHttpBinding。它不能与BasicHttpBinding一起使用,因为它只允许拉取数据(客户端池服务进行更改)。推送数据意味着服务在需要时将数据发送给客户端。

NetTcpBinding始终是克里特会话。它无法在IIS 6或更早版本中托管。仅在Windows激活服务(WAS)中允许NetTcpBinding,它是IIS 7.x的扩展。对于较旧的系统,您需要自托管= Windows服务。

编辑:

根据您的描述,您需要发布 - 订阅消息交换模式。