我编写了一个通过命名管道连接到服务器的客户端,它可以与我的服务器一起使用。但是,当我尝试连接到远程服务器时,它在我调用Connect()时失败,并抛出“请求不支持的异常”,我不知道这意味着什么(尝试查看msdn,没有帮助)。
这是相关的一段代码。我确定服务器和路径存在,因为另一个客户端(我看不到它的源,但我知道它使用nxpipe)可以连接到它。
NamedPipeClientStream stream = new NamedPipeClientStream(serverName, pipeName, PipeDirection.InOut);
stream.Connect(timeout);
有没有人有任何想法意味着什么?
感谢。
编辑(已解决): 你不会相信问题是什么。首先,订购应用程序的人忘了运行服务器应用程序并打开管道,所以我们花了好几个小时试图找出正在发生的事情,假设在远程机器上打开了管道。在他记得他忘记运行服务器应用程序(几天后)之后,我们仍然遇到了问题。那时我已经使用.NET管道和使用CreateFile的本机管道编写了一个客户端。事实证明,这家伙也忘了告诉我们管道的全部名称(虽然我们得到了“请求不支持”的无效管道名称)。幸运的是,我们有一个他们之前使用的应用程序,其中部分管道名称是硬编码的(并且您仍需要指定其中的一部分)所以我们使用进程资源管理器来确定管道的全名并最终连接。现在它可以工作:|
答案 0 :(得分:1)
命名管道仅存在于当前机器中。您需要使用TCP之类的东西来跨越机器边界。
修改强>
更正,根据this,可以跨网络进行更正。我一定是弄错了,也许默认行为是拒绝访问NT AUTHORITY\NETWORK
。
答案 1 :(得分:1)
我认为这必须是Win32 IO异常(ERROR_NOT_SUPPORTED - 错误代码50)。如果是这样,它将来自RPC / SMB协议,通过该协议将命名管道通信从一台机器远程连接到另一台机器。这意味着一方试图调用另一方不支持的协议操作。
在您的上下文中,我想这意味着您尝试启动命名管道通信的安全上下文与另一方支持的内容不兼容(或者甚至可能在协议之间具有规则的某些防火墙)电平)。
如果双方都是Windows机器,我将首先检查使用NET USE,发起方的安全上下文是否可以建立与另一方的IPC $共享的连接。我担心我不了解Libra大型机或者它可能会有什么不同。