用于客户端/服务器通信的命名管道或TCP

时间:2011-10-04 09:08:53

标签: c# .net vb.net tcp named-pipes

我的应用程序支持同一服务器进程的多个实例(Windows服务),就像f.e. SQL Server。

客户端/服务器通信只能在同一网络中进行。

我可以使用TCP,但是我必须为每个服务器实例配置单独的IP端口。但是,我可以简单地使用命名管道,因此我不必考虑端口号,只需使用服务器实例的名称。

不会有非常频繁和/或大数据的客户端/服务器通信。它是某种ERP应用程序,平均每30秒只能进行一次通信。

另外,我想阻止网络外的任何客户端/服务器通信(内联网)。

这里明智的选择是什么?

更新:客户端和服务器都是使用.NET 4编写的,没有第三方客户端可以使用该服务器。

2 个答案:

答案 0 :(得分:4)

我在几个个人项目中使用.net 4.0命名管道(System.IO.Pipes),他们很高兴能够合作。您可以在整个Intranet中使用命名管道并且性能非常高,因此我的个人建议是使用命名管道。

.net 4.0命名管道客户端也使用底层WinAPI,因此您还可以与.NET应用程序中的本机应用程序进行通信。

答案 1 :(得分:2)

这取决于客户端技术。

如果服务器和客户端都是完整的.NET Framework,则命名管道听起来不错。

但是,如果某些客户端可能不是.NET Framework(Web客户端,Silverlight或类似的东西),命名管道将是一个过度的痛苦,因为并非所有客户端技术都有任何排序用于做任何事情的网络连接或开箱即用的API。

摘要:

  • 如果客户端和服务器都使用.NET Framework,则使用命名管道,并且它总是这样,并且没有计划实现与此方案不同的任何内容。

  • 如果您想确保您的服务器可以与任何类型的客户端技术进行通信,请使用TCP。

无论如何,你打算用WCF这样做吗?也许使用TCP或命名管道可能只是一个配置的事情。查看此MSDN文章: