【问题标题】:Making WCF Host with NetNamedPipeBinding reachable from everyone on Windows 10使用 NetNamedPipeBinding 使 Windows 10 上的每个人都可以访问 WCF 主机
【发布时间】:2023-03-20 08:30:01
【问题描述】:

我有两个应用程序在 NetNamedPipeBinding 上使用 WCF 协议进行通信。一个是在 SYSTEM 下运行的服务(“S”),另一个是应用程序(“A”)。 “A”创建一个 WCF 服务。

当“A”以管理员权限运行时,一切正常。但是当在受限用户下运行时,“A”可以创建“S”无法访问的 WCF 服务。 错误是:

System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at net.pipe://app/results that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. ---> System.IO.PipeException: The pipe endpoint 'net.pipe://app/results' could not be found on your local machine. 

这个想法是让每个用户(每个用户凭据)都可以访问这个 WCF 服务。 可以使用 NetNamedPipeBinding 完成吗?最好在代码中进行整个配置,而不是在配置文件中。

        var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
        var baseAddress = new Uri(url);
        var serviceHost = new ServiceHost(implementor);
        serviceHost.AddServiceEndpoint(typeof(IImplementor), binding, baseAddress);
        serviceHost.Open();

【问题讨论】:

  • 我找到了切换到 HTTP 绑定并运行“netsh”的解决方案。但是很高兴知道如何在代码中实现类似的逻辑。

标签: windows wcf wcf-binding


【解决方案1】:

如果代码相同但访问用户不同,则表示非管理员用户无法访问该服务。

或许你可以试试下面的样例,还是不行,你可以把bug文件提交给官方。

https://docs.microsoft.com/en-us/dotnet/api/system.servicemodel.netnamedpipebinding?view=netframework-4.8

谢谢。

【讨论】:

  • 感谢您的回复。我做了大致相同的代码,它在用户之间不起作用。我不得不处理 WSDualHttpBinding 并允许用户访问公共命名空间。现在可以了。 AFAIU 的问题在于 NetNamedPipeBinding 的限制。您只是不能将底层管道指向 Global// 命名空间并添加一个允许任何人使用它的 ACL。好的,反正我的本地问题已经解决了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多