C# 在.NET命名管道和不明确异常方面存在问题

C# 在.NET命名管道和不明确异常方面存在问题,c#,.net,pipe,named-pipes,C#,.net,Pipe,Named Pipes,我已经编写了一个通过命名管道连接到服务器的客户机,它与我的服务器配合良好。然而,当我尝试连接到远程服务器时,当我调用connect()并抛出“请求不支持的异常”时,它失败了,我不知道这意味着什么(尝试查看msdn,没有帮助) 这是一段相关的代码。我确信服务器和路径是存在的,因为另一个客户端(我看不到它的源代码,但我知道它使用nxpipe)可以连接到它 NamedPipeClientStream stream = new NamedPipeClientStream(serverName, pipe

我已经编写了一个通过命名管道连接到服务器的客户机,它与我的服务器配合良好。然而,当我尝试连接到远程服务器时,当我调用connect()并抛出“请求不支持的异常”时,它失败了,我不知道这意味着什么(尝试查看msdn,没有帮助)

这是一段相关的代码。我确信服务器和路径是存在的,因为另一个客户端(我看不到它的源代码,但我知道它使用nxpipe)可以连接到它

NamedPipeClientStream stream = new NamedPipeClientStream(serverName, pipeName, PipeDirection.InOut);
stream.Connect(timeout);
有人知道那是什么意思吗

谢谢

编辑(已解决):
你不会相信问题出在哪里。首先,订购应用程序的人忘记运行服务器应用程序并打开管道,所以我们花了几个小时试图弄清楚发生了什么,假设管道在远程机器上打开。在他记得忘记运行服务器应用程序(几天后)后,我们仍然有问题。此时,我已经使用.NET管道编写了一个客户端,并使用CreateFile编写了本机管道。事实证明,这家伙还忘了告诉我们管道的全名(奇怪的是,我们得到了“不支持请求”的无效管道名称)。幸运的是,我们有一个他们之前使用的应用程序,其中有一部分管道名称是硬编码的(还有一部分您仍然需要指定),因此我们使用process explorer计算管道的全名,并最终连接。现在它可以工作了:|

命名管道只存在于当前机器中。您需要使用TCP之类的东西来跨越机器边界

编辑:


修正,根据,这是可能的跨网络。我一定弄错了,可能默认行为是拒绝访问
NT AUTHORITY\NETWORK

我认为这一定是Win32 IO异常(错误不受支持-错误代码50)。如果是这样,它将来自RPC/SMB协议,通过该协议,命名管道通信将从一台机器远程到另一台机器。这意味着一方试图调用另一方不支持的协议操作

在您的上下文中,我认为这意味着您尝试从中启动命名管道通信的安全上下文与另一方所支持的内容不兼容(或者可以想象,甚至一些防火墙之间有协议级别的规则)


如果双方都是Windows机器,我将首先使用NET USE检查发起方的安全上下文是否可以与另一端的IPC$共享建立连接。恐怕我对Libra大型机一无所知,也不知道这会带来什么不同。

来自微软网站:“命名管道为管道服务器和一个或多个管道客户端之间的通信提供单向或双向管道。命名管道可用于本地或网络上的进程间通信。单个管道名称可以由多个NamedPipeClientStream对象共享。任何进程都可以充当命名管道服务器或客户端,或两者兼而有之。“链接:@DaeMoohn:我也在读这篇文章,当我看到你的评论时,我回来更新了。谢谢!只有WCF命名管道不能跨越计算机边界。@DaeMoohn:这就是我想要的区别。谢谢。你考虑过这一点吗?”对于Windows XP Professional和Windows 2000 Server,最多可以通过网络同时连接10个管道。”(来源)什么是异常堆栈跟踪?什么操作系统平台你的客户端和服务器是什么?不幸的是,我现在不在办公室,所以我不能给你堆栈跟踪,但我可以告诉你,异常是从NamedPipeClientStream.Connect()抛出的。此外,客户端是一个在32位windows 7上用C#编写的小应用程序,服务器是很远的Libra大型机。