4

我正在尝试在网站中使用 WCF 命名管道,但失败并出现错误:

在 net.pipe://localhost/mypipename 上没有可以接受消息的端点侦听。这通常是由不正确的地址或 SOAP 操作引起的。有关更多详细信息,请参阅 InnerException(如果存在)。

和内部异常:

The pipe name could not be obtained for net.pipe://localhost/mypipename.

还有另一个内部异常给出access denied消息。

我的网站正在使用模拟,并且环顾互联网,这似乎是相关的,但我不知道如何解决它。

有没有人有任何想法?

谢谢马特

4

3 回答 3

7

标准的 WCF NetNamedPipesBinding 在服务启动时创建一个随机生成的管道名称,以及一个内核共享内存对象,WCF 客户端通道堆栈必须查阅该对象以找出管道的名称。

在您的网站上使用模拟意味着调用 WCF 服务的安全上下文具有登录令牌(模拟令牌),其中包括 NETWORK USERS 组的成员身份。

当服务侦听器启动时,WCF 绑定会在命名管道本身和发布管道名称的共享内存对象上创建访问控制列表 (ACL)。这两个 ACL 都拒绝访问 NETWORK USERS 组。因此,冒充远程用户的网站在发现管道名称之前就被拒绝访问共享内存对象。即使它以其他方式找到了管道名称,它仍然会被拒绝访问管道。

删除模拟后一切正常,因为现在正在 Web 应用程序工作进程的安全上下文中调用服务,其登录令牌不具有 NETWORK USERS 组的成员资格 - 它是本地登录。

More details at http://blogs.charteris.com/blogs/chrisdi if you're interested. I show how the ACLs can be adjusted, and in principle this approach could be used to grant access to remote users, but I don't recommend this.

于 2010-11-15T16:50:14.873 回答
0

如果您遇到此特定异常,通常意味着您的服务未运行。我看到你localhost在 URL 中使用。我只想确保主机和服务在同一台机器上运行。WCF 不允许使用此绑定跨机器进行通信。

当我收到此消息时,通常我会检查并发现我忘记启动服务,因此没有端点监听。请检查您的服务是否实际上仍在运行,并且在引发异常时没有崩溃。如果这不能解决问题,请发布您的进度,我可以提出更多建议。

于 2010-07-30T15:36:26.670 回答
0

我通过使最终调用网络管道的 IIS 端点对匿名用户可用,从而解决了这个问题,这意味着没有模拟。

于 2010-08-19T21:42:10.827 回答