Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF或自定义套接字体系结构_C#_Wcf_Sockets - Fatal编程技术网

C# WCF或自定义套接字体系结构

C# WCF或自定义套接字体系结构,c#,wcf,sockets,C#,Wcf,Sockets,我正在编写一个客户机/服务器体系结构,其中在多个虚拟机上可能会有数百个客户机,大部分在intranet上,但也有一些在其他位置 每个客户端将不断收集数据,并每隔大约一秒钟向服务器发送一条消息。每条消息的长度大约为128个字符 我的问题是,对于这种在.NET中编写客户机/服务器的体系结构,我应该使用WCF还是以前编写的一些套接字代码。我需要可伸缩性(socket代码考虑到了这一点)、可靠性和处理那么多消息的能力。对于WCF服务来说,每秒100个请求听起来不太像,尤其是在负载很小的情况下。但是,使用

我正在编写一个客户机/服务器体系结构,其中在多个虚拟机上可能会有数百个客户机,大部分在intranet上,但也有一些在其他位置

每个客户端将不断收集数据,并每隔大约一秒钟向服务器发送一条消息。每条消息的长度大约为128个字符


我的问题是,对于这种在.NET中编写客户机/服务器的体系结构,我应该使用WCF还是以前编写的一些套接字代码。我需要可伸缩性(socket代码考虑到了这一点)、可靠性和处理那么多消息的能力。

对于WCF服务来说,每秒100个请求听起来不太像,尤其是在负载很小的情况下。但是,使用WCF服务设置一个简单的设置应该很快,一个echo方法只返回输入,然后用一堆线程和一个循环连接一个客户机


如果您已经有了一个可用的套接字实现,您可能会保留它,但如果没有,您可以选择WCF并将宝贵的开发时间花在其他地方。

根据我使用WCF的经验,我可以告诉您,它在高负载下的性能非常好。特别是,您可以在多个绑定之间进行选择,以满足不同场景的需求(httpBinding用于外部通信,netPeerTcpBinding用于本地网络,例如)

如果不提供一些概念证明,我不会做出最终决定。创建非常简单的服务,托管它,并使用一些压力测试来获得真正的性能结果。而不是根据您的需求验证结果。您提到了邮件的数量,但没有提到预期的响应时间。目前讨论的类似问题是,与套接字相比,WCF的响应时间较慢

在您的帖子中没有直接提到其他要求,因此我将对最佳性能做一些假设:

  • 使用netTcpBinding-最佳性能,二进制编码,需要.NET服务器/客户端。我猜您将使用Net.Tcp,因为您的另一个选择是直接套接字编程
  • 如果不需要,请不要使用安全性-降低性能。对于内部网之外的客户机可能不可能
  • 如果可能,在客户端上重用代理。如果重复使用同一个代理,则打开TCP连接的成本很高,每个代理将有一个连接。这将影响服务的实例化-默认情况下,单个服务实例将处理来自单个代理的所有请求
  • 设置服务限制,以便您的服务主机为许多客户端做好准备
此外,您还应该做出一些关于负载平衡的决定。WCF net.tcp连接的负载平衡需要粘性会话(会话亲缘关系),以便在打开通道后,客户端始终调用同一服务器上的服务(因为该服务的实例仅在单个服务器上创建)