【问题标题】:How to cross a session boundary using a WCF named pipe binding?如何使用 WCF 命名管道绑定跨越会话边界?
【发布时间】:2011-02-10 15:56:43
【问题描述】:

Windows 7 具有运行服务的会话 0,以及与用户交互的其他会话。

在会话 0 中运行的 WCF 客户端无法看到在会话 1 中公开的管道,除非::

  • 设置SeCreateGlobalPrivilege - 不适合我
  • 显示作为会话 0 用户运行但对会话 1 用户可见的 UI - 当服务使用 CreateProcessAsUser 启动 UI 时,这是可能的
  • 使用其他绑定,例如netTcpBinding

还有其他解决方案吗?

这个问题也出现在a Microsoft forum post

【问题讨论】:

标签: wcf session windows-7 named-pipes netnamedpipebinding


【解决方案1】:

硬化......它也让我着迷。我找不到修复程序,不得不更改为TcpBinding

【讨论】:

  • 这个解决方案的主要缺点是 UAC 会询问用户是否允许这样做,因为它暴露了一个 TCP 端口
  • 你是对的,但我们的应用程序也需要 TCP 来与外部通信,所以无论如何我们都必须处理它。
  • 这与“命名管道硬化”无关。这完全是关于在 Vista 中引入的内核对象命名空间(全局和本地)的分离......并且它为共享内存部分的安全性带来的变化导致了问题,而不是管道安全性本身。命名管道本身在会话中是可见的;但是 NetNamedPipeBinding 用于发布当前管道名称的共享内存位于本地命名空间中,如果服务器以没有 SeCreateGlobalPrivilege 的普通用户身份运行,则对其他会话不可见。
【解决方案2】:

我正在考虑另一种解决方案:反转角色并使用CallbackContract

【讨论】:

猜你喜欢
  • 2010-10-22
  • 2010-11-05
  • 2021-04-16
  • 2014-02-23
  • 1970-01-01
  • 2010-09-16
  • 2010-09-25
  • 2014-12-20
  • 1970-01-01
相关资源
最近更新 更多