我们有一个.NET 4.0 Windows服务,它通过命名管道(使用IPC)托管端点。此服务在用户A的上下文中运行。
我们有一个ASP.NET托管的客户端,它请求上述服务公开的操作。此客户端在用户B的上下文中运行(通过匿名访问,通过<identity impersonate="true" />
)。
问题:
如果我们在web.config中使用<identity impersonate="true" />
(这不能更改),我们会收到“无法连接到IPC端口:访问被拒绝”。客户端尝试调用托管操作时的异常。如果<identity impersonate... />
不存在(可能是因为没有使用ASP.NET,比如客户端控制台应用程序),我们没有问题。
有没有人知道如何使这个配置正常工作,所以我们停止接收拒绝访问错误?它与身份验证有关,但我们无法解决这个问题。
答案 0 :(得分:0)
回顾70-503:net.pipes仅适用于Windows安全性。很明显,因为整个过程(WCF)仅在当前(Windows)机器上。 ASP.NET默认情况下在专用ASP.NET用户的凭据下运行,其权限受到严格限制。我不介绍ASP.NET用户有权访问当前机器,访问本地文件,net.pipes等。它只能访问您的网站运行的文件夹。因此,通过冒充用户就像确保只拥有运营网站的权利一样。
您可以执行的操作是模拟具有相应权限的特定Windows帐户。这可以使用程序化模拟来完成。或者使用授权。阅读它here以使用最适合的解决方案。
答案 1 :(得分:0)
由于NetWorkService被限制无法查看或访问管道,因此无法实现。
回答here