![](/img/trans.png)
[英]WCF exception 'net.pipe' protocol is disabled for the site temporarily
[英]Is it possible to have a WCF client running in an ASPX call an SVC via net.pipe in another site on the same machine?
我有两个网站-一个带有aspx文件的网站,一个带有wcf服务且带有两个端点,一个http和一个命名管道的网站。 它们都在同一台机器上运行,因此它们似乎是使用net.pipe绑定的候选对象。
aspx文件创建一个服务客户端,并尝试调用net.pipe。 我得到这个:
“'/ dev'应用程序中的服务器错误。由于在端点地址'net.pipe:// localhost / netNamedPipeBinding'上的服务不适用于该地址的协议,因此无法调度该消息。”
谷歌搜索表明这可能是一个安全问题(没有权限错误与没有侦听器错误相同),但是我已经向[NETWORK]用户组授予了具有服务的网站文件的NTFS权限,并且没有任何更改。
具有aspx的网站正在使用表单身份验证(即,不是Windows身份验证),服务网站是匿名身份验证。 web.config的net.pipe安全性设置为=“ None”
在本地,这可以正常工作-尽管我必须在控制台应用程序中运行命名管道主机,因为Visual Studio Dev Server无法执行命名管道。 另外,Http终结点在IIS上也可以正常工作。
它正在运行.NET 4.0,IIS 7.5,Win2008。
IIS Config据我所知,
服务配置 (在同一台计算机上的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绑定正常工作
当命名管道以这种方式承载在IIS中时,您无法设置其名称。 结果,客户端无法找到该服务。 在这里查看答案以了解更多详细信息: 在iis中托管wcf-net-pipe-binding时控制命名管道的名称
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.