我想使用namedpipeserver / client在网络中两台计算机上的两个应用程序之间进行通信。该网络是SOHO体系结构,因此安全性受到的关注较小,我们目前正在尝试使系统正常运行。
我编写了一个任务栏应用程序(用于打开服务器)(在计算机A上)和一个winform应用程序,该应用程序连接到服务器(在计算机B上)。在同一台计算机上同时运行这两个功能可以实现功能上的交互。
在两台计算机上尝试都会出现错误“ System.IO.IOException:“ Der Benutzername oder das Kennwort ist falsch”。(英语:“用户名或密码不正确”)
我已经搜索了很多内容,发现了一些有趣的文章,例如:
Setting named pipe security in a Domain
Named pipe client unable to connect to server running as Network Service
NamedPipeClientStream can not access to NamedPipeServerStream under session 0
Named Pipes Across Network Gives "The user name or password is incorrect"
我相应地更改了服务器的安全设置:
PipeSecurity pipeSa = new PipeSecurity();
// Set the pipesecurity
pipeSa.SetAccessRule(new PipeAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null),
PipeAccessRights.ReadWrite, AccessControlType.Allow));
// Alternative with "everyone"
// pipeSa.SetAccessRule(@"Jeder", PipeAccessRights.ReadWrite, AccessControlType.Allow));
serverPipeStream = new NamedPipeServerStream(
pipeName,
PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Message,
PipeOptions.Asynchronous,
10,
10,
pipeSa);
A,没有成功。我还检查了两台计算机上防火墙的端口设置,并且无法连接。对于如何进一步解决此问题或我做错了什么的任何提示,将不胜感激。
答案 0 :(得分:0)
尝试:
var sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
var account = (NTAccount)sid.Translate(typeof(NTAccount));
var rule = new PipeAccessRule(
account.ToString(),
PipeAccessRights.FullControl,
AccessControlType.Allow);
var securityPipe = new PipeSecurity();
securityPipe.AddAccessRule(rule);
var pipeserver = new NamedPipeServerStream(
Name,
PipeDirection.InOut,
NamedPipeServerStream.MaxAllowedServerInstances,
PipeTransmissionMode.Message,
PipeOptions.None,
0,
0,
securityPipe)
对我来说很好。