.NET中TCP应用服务器的技术

时间:2013-07-30 13:30:24

标签: .net wcf web-services

我们正在使用服务器组件扩展现有应用程序(带有SQL Server的.NET)。该组件扮演两个角色:它执行后台任务(长时间运行的计算和类似任务的cron作业),并通过为本地网络上运行的应用程序提供API来充当应用程序服务器。

问题是:用于实现应用程序服务器位的技术(在.NET世界中)。要求如下:

  • 应该很容易安装,只有很少的依赖。
  • 与服务器的所有通信都应该可靠,加密, 经过身份验证的服务器和客户端。
  • 吞吐量不如响应时间重要(< 100次呼叫每次 第二个),应立即回答每个请求(如何时) 通过TCP连接使用SELECT 1查询sql server);我猜 这意味着技术的开销尽可能小 发送/接收请求。
  • 许多调用都会有很重的二进制负载(基本上是客户端 请求或发送文件,主要在1到5 mb之间。
  • 可扩展且面向未来。
  • 能够在某个时刻使API“公开” 未来,以便它可以被第三方应用程序使用 (SOA风格)无需添加另一个服务器组件 (并打开防火墙中的另一个端口)。

实际上,此应用程序服务器的最大任务(目前)是提供文件,并允许上传这些文件的修订版。

我花了相当多的时间浏览网络,并提出了以下可能的方法/技术列表:

  • 纯TCP,顶部有自己的协议。 (走这条路就是 在我的情况下,膝跳反应。)优点:面向未来,灵活, 高效,SSL易于添加(described here), 面向连接(即,在应用程序时打开TCP套接字 启动,在应用程序结束时关闭它,SSL握手和 身份验证只执行一次)。缺点:没什么标准 第三方可以轻松整合,原始的 发展模式。
  • ASMX Webservice 。优点:基于标准接口 WSDL / Soap,SSL很容易添加,代码生成隐藏了凌乱的实现细节。缺点:没有 未来证明,只有SOAP over HTTP,对文件传输效率不高 (XML中的base64),需要IIS进行托管(因此不容易安装)。
  • Windows Communication Foundation(WCF)。优点:很多支持 绑定(其中一些是像WSDL / Soap这样的开放标准), 同时暴露多个接口的可能性,SSL很容易 添加,代码生成,可以托管在任何.NET进程中(因此很容易 安装),使用NetTcpBinding WCF似乎非常有效(尽管第三方完全无法使用)。缺点:学习曲线。
  • ASP.NET Web Api 。缺点:仅需要IIS进行托管 REST / HTTP。虽然REST可能非常适合提供文件,但更丰富 某些其他功能需要接口。
  • .NET Remoting 。被WCF取代。

基于此,看起来好像是WCF。

问题1:我是否遗漏了以上列表中的一些重要技术/缺点/优势?

问题2:那些在该领域具有专业知识的人是否同意WCF是实现上述要求的方式?

问题3: WCF的效率怎么样?看到诸如this one之类的问题让我想知道不是面向连接不会成为性能问题。该帖子描述了在一段时间不活动后响应时间如何增加到数百毫秒的数量级。此外,为每个请求创建SSL握手似乎效率很低。

3 个答案:

答案 0 :(得分:1)

使用您自己的协议不是未来的证明,因为您是唯一可以支持它的人。这也是必要的工作量。

WCF是一个久经考验的框架,几乎可以满足您的任何服务需求。您可以创建单个服务(类/接口)并根据您的要求以不同方式公开它,这意味着相同的服务可以是外部客户端的Https外部端点,tcp.net内部端点和REST端点都在同一个时间只有一些额外的配置。

WCF已经存在了很长时间,它不会去任何地方。最重要的是,网络上有大量的支持/信息。

答案 1 :(得分:0)

Pure TCP有更多缺点:您可能需要创建自己的主机。重新部署怎么样?需要先关闭并停机。

在我看来,下一步将是测试WCF配置并找出是否可以延迟延迟。显然,100毫秒不能“正常”。对于连接池,我希望通常的网络延迟加上少量的CPU时间来处理请求。可能< 1毫秒。

如果你可以让WCF工作,那么所有其他要点都没有意义,因为除了性能要求外,WCF显然是最好的选择。

答案 2 :(得分:0)

忘记Web服务,它们太慢了。

我会在UDP或TCP之上使用我自己的协议。它速度快,重量轻,易于扩展。您只需要很好地记录您的协议。 套接字通信是一种标准!

WCF我从未使用过。