Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 用于客户端/服务器通信的命名管道或TCP_C#_.net_Vb.net_Tcp_Named Pipes - Fatal编程技术网

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

C# 用于客户端/服务器通信的命名管道或TCP,c#,.net,vb.net,tcp,named-pipes,C#,.net,Vb.net,Tcp,Named Pipes,我的应用程序支持同一服务器进程(Windows服务)的多个实例,就像f.e.SQL server一样 客户端/服务器通信将仅在同一网络中进行 我可以使用TCP,但是我必须为每个服务器实例配置单独的IP端口。但是,我可以简单地使用命名管道,这样我就不必考虑端口号,只需使用服务器实例的名称 不会有非常频繁和/或大数据的客户机/服务器通信。它是某种ERP应用程序,平均每30秒只进行一次通信 此外,我还希望防止网络(intranet)之外的任何客户机/服务器通信 什么是明智的选择 更新:客户端和服务器都

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

客户端/服务器通信将仅在同一网络中进行

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

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

此外,我还希望防止网络(intranet)之外的任何客户机/服务器通信

什么是明智的选择


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

这取决于客户端技术

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

但是,如果有些客户机可能不是.NET Framework(Web客户机、Silverlight或类似的东西),那么命名管道将是一件非常痛苦的事情,因为并非所有的客户机技术都具有任何类型的网络连接或现成的API来完成您想做的任何事情

总结:

  • 如果客户端和服务器都使用.NET Framework,则使用命名管道,并且始终是这种方式,并且没有计划实现与此场景不同的任何内容

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

不管怎样,你打算用WCF这样做吗?也许使用TCP或命名管道只是一种配置。查看此MSDN文章:


我在我的几个个人项目中使用了.net 4.0命名管道(),与它们一起工作是一件愉快的事情。您可以在整个intranet中使用命名管道,而且非常有效,因此我个人的建议是使用命名管道


此外,.net 4.0命名管道客户端还利用了底层WinAPI,因此您也可以从.net应用程序与本机应用程序通信。

选择名称的方便性不应成为首选命名管道的原因。客户端将如何找到管道的名称?为什么不创建一个抽象的传输框架并允许使用命名管道或TCP?SQL Server正是这样做的。@Jonathan:或者使用一个像WCF(它是.NET的一部分)这样的现有服务器。我已经更新了我的问题。客户端和服务器都是用.NET4编写的。好吧,我的答案仍然有效:)但还是要感谢您更具体的介绍。