gpt4 book ai didi

c# - 未为 WS 2008 R2 上的命名管道设置句柄

转载 作者:行者123 更新时间:2023-11-30 18:28:22 28 4
gpt4 key购买 nike

我在一个服务器上打开命名管道失败了Windows Server 2008 R2 预生产暂存主机我在开发中开发该代码完全没有问题WS 2008 R2 主机(应该配置相同)并测试该管道的运行情况。

应用程序在 IIS 中有一个 WCF RESTful Web 服务通过命名管道连接到 Windows 服务。这Windows 服务然后通过 Perl 查询 Oracle 数据库脚本。但是在预生产暂存主机上我们永远不会走那么远,因为管道无法打开。

第一个问题是访问冲突。当我治愈对于 PipeSecurity 实例,我得到了一个丢失的句柄异常(exception)。我以管理员身份完成所有工作主人。我已经打开对所有相关文件夹的访问权限在预生产主机上(是的,我会再次保护它一旦它工作)。 IIS 日志显示没有异常WCF 服务。

这是来自开发主机的有效代码“开箱即用”,没有任何问题。

ClientPipe = new NamedPipeClientStream(
".", "QueryPipe", PipeDirection.InOut, PipeOptions.None,
TokenImpersonationLevel.None);

ClientPipe.Connect();

简单直接。

这是来自预生产暂存主机的代码我已经无休止地修补以尝试得到它去工作。

ClientPipe =
new NamedPipeClientStream(".", "QueryPipe",
PipeAccessRights.FullControl,
PipeOptions.None,
TokenImpersonationLevel.None,
HandleInheritability.None);

PipeSecurity _ps = new PipeSecurity();

_ps.AddAccessRule(new PipeAccessRule(
WindowsIdentity.GetCurrent().User,
PipeAccessRights.FullControl, AccessControlType.Allow));

_ ps.AddAccessRule(new PipeAccessRule(
"SYSTEM", PipeAccessRights.FullControl, AccessControlType.Allow));

ClientPipe.SetAccessControl(_ps);

ClientPipe.Connect();

使用 PipeSecurity 类解决了最初的问题具有访问权限(感谢 Chris Dickson 2010 年的回答关于设置管道访问)。

但是在设置访问控制后我得到了这个异常:

** Pipe Error: System.InvalidOperationException:
Pipe handle has not been set.
Did your PipeStream implementation call InitializeHandle?

我用 Google 搜索到指尖变蓝,但没有得到一个有用的答案。看来我早该有了仅使用构造函数设置句柄。初始化句柄不应该在这里应用。

因此,我期待您在这些问题上的专业知识。

最佳答案

它可能有权限问题:因此,需要提供所需的访问权限。

PipeSecurity _pipeSecurity = new PipeSecurity();
PipeAccessRule psEveryone = new PipeAccessRule("Everyone", PipeAccessRights.FullControl, System.Security.AccessControl.AccessControlType.Allow);


_pipeSecurity.AddAccessRule(psEveryone);

NamedPipeServerStream pipeServer = new NamedPipeServerStream(PipeName,
PipeDirection.In, 1, PipeTransmissionMode.Message, PipeOptions.Asynchronous, 4, 4, _pipeSecurity);

要克服只听一次的问题,请遵循以下设置:右键单击相应的服务 > 属性 > 登录 > 登录为:本地系统帐户并勾选允许服务与桌面交互。或者转到 ServiceProcessInstaller 属性并将帐户设置为 LocalSystem。

关于c# - 未为 WS 2008 R2 上的命名管道设置句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25105361/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com