我有一个WCF服务需要在WCF中使用NetNamedPipeBinding公开。由于某些限制,我无法自行托管作为Windows服务。它必须通过IIS。
我觉得我已经耗尽了所有可用的资源来尝试启动和运行我的服务,但我无法使用它,甚至无法判断它是否被IIS接收。
注意 - 我确保Net Pipe Listener服务已启用,并且“非激活”内容已打开,这些内容将在下面的文章中介绍。此外,我将IIS站点中的“启用的协议”更改为“http,net.pipe”。
我正在尝试使用以下代码来使用该服务:
string baseAddress = "net.pipe://localhost/Services/";
ChannelFactory<IMyService> factory = new ChannelFactory<IMyService>(
new NetNamedPipeBinding(NetNamedPipeSecurityMode.None),
baseAddress);
IMyService service = factory.CreateChannel();
var restResult = service.MyMethod();
我的web.config具有以下服务定义。
<system.serviceModel>
<services>
<service name="Path.To.My.Service.MyService"
behaviorConfiguration="NamedPipeServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="net.pipe://localhost/Services/"/>
</baseAddresses>
</host>
<endpoint address=""
binding="netNamedPipeBinding"
contract="Path.To.My.Service.IMyService"/>
<endpoint address="mex"
binding="mexNamedPipeBinding"
contract="IMetadataExchange"/>
</service>
</services>
<bindings>
<netNamedPipeBinding>
<binding name="Binding1">
<security mode="None"/>
</binding>
</netNamedPipeBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="NamedPipeServiceBehavior">
<serviceMetadata />
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="True" aspNetCompatibilityEnabled="True"/>
</system.serviceModel>
我希望我有一个非常直截了当的问题,但我真的不确定问题出在哪里。
我不确定IIS是否正在选择此服务,我相当肯定元数据未正确公开。
我引用了以下文章/示例:
http://dotnetmentors.com/wcf-by-example-on-netnamedpipebinding.aspx http://dotnetmentors.com/hosting-wcf-service-with-nettcpbinding-or-netnamedpipebinding-in-iis.aspx http://mohammedatef.wordpress.com/tag/netnamedpipebinding/ http://msdn.microsoft.com/en-us/library/ms752247.aspx http://tech.pro/tutorial/855/wcf-tutorial-basic-interprocess-communication
答案 0 :(得分:0)
您需要为IIS站点设置绑定。