首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IIS中承载WCF net.pipe绑定时控制命名管道的名称

在IIS中承载WCF net.pipe绑定时控制命名管道的名称
EN

Stack Overflow用户
提问于 2009-11-27 09:43:08
回答 2查看 8.2K关注 0票数 6

我有一个可以通过http和net.pipe访问的服务。它托管在IIS 7 (Server 2008)中。我可能会在同一台机器上为几个客户托管这个服务的不同实例,因此HTTP是用虚拟主机名等设置的。

我想我应该对网络命名管道绑定做类似的操作--在命名管道基地址中使用某种形式的客户‘虚拟主机名’,从而允许我访问具有不同URN的不同客户实例(我意识到URN名称不是net.pipe的URN,所以它们本质上可以是任意的,但我认为我应该遵循类似于net.pipe地址的模式)。

这是我的web.config

代码语言:javascript
复制
<service name="Administration" behaviorConfiguration="AdministrationBehavior">
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="normalWsBinding" contract="IAdministration" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
    <endpoint address="" binding="netNamedPipeBinding" bindingConfiguration="normalNetNamedPipeBinding" contract="IAdministration" />
    <endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
    <host>
      <baseAddresses>
        <add baseAddress="http://virtualhostname.com/service" />
        <add baseAddress="net.pipe://virtualhostname.com/administration/service" />
      </baseAddresses>
    </host>
</service>

但是,当访问服务的WSDL时,IIS似乎忽略了net.pipe的基地址。取而代之的是,我得到了机器的真实主机名,以及一个似乎完全由IIS格式化的net.pipe地址URN。

代码语言:javascript
复制
<wsdl:port name="NetNamedPipeBinding_IAdministration" binding="tns:NetNamedPipeBinding_IAdministration">
   <soap12:address location="net.pipe://realhostname/service/Administration.svc"/>
   <wsa10:EndpointReference>
       <wsa10:Address>net.pipe://realhostname.com/service/Administration.svc</wsa10:Address>
       <Identity>
          <Spn>host/realhostname.com</Spn>
       </Identity>
   </wsa10:EndpointReference>
</wsdl:port>

由于无法控制net.pipe名称的形成方式,我将无法区分机器上的多个客户服务实例。有谁知道如何在IIS环境中控制net命名管道绑定URN吗?

(我在测试期间做了很多独立的net.pipe托管(比如新的ServiceHost(),所以我知道我的net.pipe绑定确实可以在IIS之外工作,并且确实允许控制所使用的确切命名管道URN )

如果名称不能在IIS中控制--有没有人有在同一台机器上托管和访问多个独立的net.pipe服务实例的经验?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-08 10:11:37

这是一个古老的问题,但我想我应该加上我的答案,因为我也需要一个答案(也许还有其他人也需要这个答案)。

IIS承载的WCF服务的基地址由IIS控制,不能在web.config中重写。相反,您可以通过更新承载服务的站点的IIS站点绑定信息来控制基地址。

我在网上找到的大多数文档都建议使用*作为net.pipe的绑定配置。但是,如果您使用"virtualsite.com“作为绑定配置值,那么您的net.pipe端点的基地址将是"virtualsite.com”,而不是机器名。

下面是一个使用appcmd在IIS中使用正确的net.pipe绑定配置站点的示例:

代码语言:javascript
复制
%windir%\system32\inetsrv\appcmd.exe set site "Default Web Site" -+bindings.[protocol='net.pipe',bindingInformation='virtualhostname.com']

根据MSDN的说法,关于HostnameComparisonMode,需要注意的一点是,它在IIS中没有任何影响

在Internet信息服务(IIS)或Windows Process Activation Service (WAS)宿主环境中使用时,这些值不起作用。在这些情况下,WCF使用承载WCF服务的IIS网站提供的任何主机名比较模式。

相反,您必须使用我上面描述的机制。我通过研究IIS的HTTP中主机名绑定是如何工作的来解决这个问题的。不幸的是,对于其他WCF传输,我还找不到任何关于这个基于IIS的场景的官方文档。

票数 3
EN

Stack Overflow用户

发布于 2010-07-23 04:32:20

URI的主机名部分似乎被忽略,并被基于通道绑定的HostNameComparisonMode的实现所取代。您可以尝试通过服务的配置将其更改为"Exact“...

http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.hostnamecomparisonmode.aspx

NetNamedPipeBinding.HostnameComparisonMode指示在与URI匹配时是否使用主机名访问服务的HostnameComparisonMode值。默认值为StrongWildcard(),它忽略匹配中的主机名。

请参阅此处的配置语法:http://msdn.microsoft.com/en-us/library/ms731291.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1806430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档