我有两个网站 - 一个带有aspx文件,一个带有两个端点的wcf服务,一个http和一个命名管道。它们都运行在同一台机器上,所以它们似乎是使用net.pipe绑定的候选者。
aspx文件创建一个服务客户端并尝试调用net.pipe。我明白了:
"' / dev'中的服务器错误应用。消息不可能 因为端点地址处的服务而被调度 ' net.pipe://本地主机/ netNamedPipeBinding'是不可用的 地址协议。"
Google搜索提示这可能是一个安全问题(没有权限错误与没有侦听器错误相同),但我已经将[NETWORK]用户组的NTFS权限授予了包含这些服务的网站文件,但没有变化
使用aspx的网站使用Forms身份验证(即不是Windows身份验证),服务网站是匿名身份验证。 web.config的net.pipe安全性设置为="无"
在本地,这很好用 - 虽然我必须在控制台应用程序中运行命名管道主机,因为Visual Studio Dev Server不能执行命名管道。此外,Http端点在IIS上运行正常。
它运行的是.NET 4.0,IIS 7.5,Win2008。
IIS配置 据我所知,
服务配置(在同一台计算机上的IIS上运行,不同的VDIR)
<system.serviceModel>
<bindings>
<netNamedPipeBinding>
<binding name="netNamedPipeBindingConfig" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport protectionLevel="EncryptAndSign" />
</security>
</binding>
</netNamedPipeBinding>
</bindings>
<services>
<service name="MyService">
<host>
<baseAddresses>
<add baseAddress="net.pipe://localhost/" />
</baseAddresses>
</host>
<endpoint
address="netNamedPipeBinding"
bindingConfiguration="netNamedPipeBindingConfig"
binding="netNamedPipeBinding"
contract="IMyService" >
</endpoint>
</service>
</services>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
客户端配置(ASP.NET网站,同一台计算机,与服务不同的VDIR)
<system.serviceModel>
<bindings>
<netNamedPipeBinding>
<binding name="NetNamedPipeBinding_IMyService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
maxBufferSize="65536" maxConnections="10" maxReceivedMessageSize="65536">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport protectionLevel="EncryptAndSign" />
</security>
</binding>
</netNamedPipeBinding>
</bindings>
<client>
<endpoint
address="net.pipe://localhost/netNamedPipeBinding"
binding="netNamedPipeBinding"
bindingConfiguration="NetNamedPipeBinding_IMyService"
contract="MyService.IMyService"
name="NetNamedPipeBinding_IMyService">
</endpoint>
</client>
</system.serviceModel>
(改变服务和合同名称以保护无辜者)
C#并不特别,只有Add-Service-Reference生成的代理。 (并且所有代码都适用于wsHttp绑定
答案 0 :(得分:1)
当以这种方式在IIS中托管命名管道时,无法设置它的基址。结果,客户端无法找到该服务。请在此处查看答案以获取更多详细信息: controlling-the-name-of-a-named-pipe-when-hosting-wcf-net-pipe-binding-in-iis