没有端点在 net.pipe 监听的异常。

3

我有很多WCF服务,需要从一个服务中调用另一个服务。我决定使用netNamedPipeBinding来实现这个目的。

我的web.config文件如下所示。(这里没有复制不相关的内容。)

 <services>
          <service             name="Services.AuthorizationService"    >
            <endpoint contract="IMetadataExchange" binding="mexHttpBinding" address="mex" >
            <endpoint
              name="AuthorizationService"
              address=""
              binding="basicHttpBinding"               contract="ServiceContracts.IAuthorizationService" />
            <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
                   binding="netNamedPipeBinding"                   contract="ServiceContracts.IAuthorizationService"
                   name="AuthorizationNamedPipeEndpoint"/>           
          </service>
</Services>

Web.config文件中的客户端部分如下所示:
<client>
      <endpoint address="net.pipe://localhost/TestSite/AuthorizationService.svc"
       binding="netNamedPipeBinding"            contract="ServiceContracts.IAuthorizationService" name="AuthorizationServiceNamedPipe" />
    </client>

我正在尝试像这样调用一个OperationContract(GetDetails):

  using (ChannelFactory<IAuthorizationService> authorizationChannel = new ChannelFactory<IAuthorizationService>("AuthorizationServiceNamedPipe"))
                        {
                            IAuthorizationService authorizationService = authorizationChannel.CreateChannel();
                            var response = authorizationService.GetDetails(new GetDetailsRequestMessage());
                        }

当我执行这段代码时,在调用OperationContract GetDetails的那一行会出现异常:
无法连接到 net.pipe://localhost/TestSite/AuthorizationService.svc,这通常是由于地址或SOAP操作不正确引起的。如果存在InnerException,请参见其详细信息。
我无法找出确切的问题。也没有 InnerException。我的机器运行着 Windows7,IIS版本为 IIS7.5。请注意,我可以从我的 Winform 应用程序中调用此服务,没有任何问题。net.pipe 绑定已添加到 IIS 中网站绑定中。
如何确保使用 net.pipe 传输服务正常工作?在 HTTP 的情况下,我们可以在 IE 中浏览并确认它。

我发现你在服务器端没有提供地址或主机基础地址。这是一个错误吗? - Jack
即使我提供了地址,它仍然失败。 - Learner
当服务启动时,您是否遇到任何问题? - Jack
两个服务都在同一台机器上运行吗? - Franchesca
@Franchesca:是的,它们在同一台机器上运行的 IIS 7.5 上。 - Learner
不行。我可以浏览该服务,并且可以使用wshttpBinding从我的旧版WSE3客户端调用它。只有当我使用netNamedPipeBinding从另一个服务调用一个服务时,它才会失败。 - Learner
2个回答

9
这个问题在启用“控制面板 -> 程序和功能”,然后在左侧窗格中单击“打开或关闭Windows组件”,展开Microsoft .NET Framework 3.5并激活Windows Communication Foundation Non-HTTP Activation组件后解决。
当它被激活且使用非HTTP绑定时,自动使用WAS。
我犯了一个非常基本和愚蠢的错误,但它帮助我学到了很多东西。以下文章对我有很大帮助: 通过WAS扩展您的WCF服务超出HTTP 在Windows Activation Service中托管WCF服务 当使用虚拟机上托管的WCF服务调用消费者尝试调用WCF服务时,WCF获取访问被拒绝 最后一个链接给了我一个指针,表明与服务器证书相关的配置可能会导致问题。而我正在为服务添加一个行为(在问题中看不到)。该行为使用了服务器证书。

我有一个托管在IIS之外的WCF服务。从我的RIA域服务(运行在IIS内部)中,我必须通过nettcpnamedpipe绑定调用这个托管在IIS之外的WCF服务。但似乎无法正常工作。你是否遇到了同样的问题? - Frank Q.

0

我们在SharePoint 2013中遇到了同样的问题。在安装过程中发生了一些事情,激活设置没有打开。我不确定是应用程序服务器功能还是其他什么问题。

所以感谢您的帖子!我们也能够解决SP 2013的问题。以下是我们看到的异常信息,供可能遇到此问题的人参考:

System.ServiceModel.EndpointNotFoundException: 没有侦听 net.pipe://localhost/SecurityTokenServiceApplication/appsts.svc 的终结点可以接受该消息。这通常是由于地址或 SOAP 操作不正确引起的。如果存在,则查看 InnerException 获取更多详细信息。--->

System.IO.PipeException: 在本地计算机上找不到管道终结点 'net.pipe://localhost/SecurityTokenServiceApplication/appsts.svc'。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接