2013-11-03 123 views
1

我試圖在Win7中用IIS 7.5創建WCF NamedPipe。在Win7 IIS 7.5上託管NamedPipe WCF EndpointNotFoundException

  1. 在IIS管理器中右擊,並創建一個名爲 「TestWCFWithNamedPipe」
  2. 網頁右鍵點擊我的網站 「TestWCFWithNamedPipe」 - >選擇編輯綁定

    Type:http 
    Host Name:sample.localdev.net 
    Port:80 
    Address:* 
    
    Type:net.pipe 
    Binding informations:* 
    
  3. 在高級設置中設定的值啓用議定書 「HTTP,net.pipe」

  4. 在我的網站 「TestWCFWithNamedPipe」 Web應用程序項目

web.config

<configuration> 
<system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
</system.web> 

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
      <behavior name="DefaultBehavior"> 
       <serviceDebug /> 
       <serviceMetadata httpGetEnabled="true" /> 
      </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="DefaultBehavior" name="SampleWcfLib.SampleWcfObj"> 
      <endpoint address="net.pipe://localhost/Sample" binding="netNamedPipeBinding" 
       bindingConfiguration="" contract="SampleWcfInterfaceLib.ISampleWcfObj" /> 
     </service> 
    </services> 
</system.serviceModel> 

TestClient.exe代碼以下

string address = "net.pipe://localhost/Sample"; 
NetNamedPipeBinding binding = new NetNamedPipeBinding(); 
EndpointAddress ep = new EndpointAddress(address); 
ISampleWcfObj channel = ChannelFactory<ISampleWcfObj>.CreateChannel(binding, ep); 
string result = channel.Ping("Test"); 

我跑TestClient.exe,我得到一個異常:

有沒有終點在net.pipe:// localhost/Sample中偵聽可以接受消息的示例。這通常是由不正確的地址或SOAP操作引起的。有關更多詳細信息,請參閱InnerException(如果存在)。

我已經檢查了Win7的服務狀態:

Net.Pipe Listener Adapter Started 
Net.Tcp Listener Adapter Started 

我已經做了WCF所有設置。

爲什麼我仍然得到EndpointNotFoundException錯誤消息?

+0

您設置的網站在IIS sample.localdev.net。你不應該用那個地址嗎? – Szymon

+0

我使用net.pipe模式,是net.pipe需要「sample.localdev.net」地址嗎? 所以我應該使用「net.pipe://sample.localdev.net/Sample」?我試過了,錯了! – Flash

+0

我會放棄它。 – Szymon

回答

2

如果您在XSD文件中查看,可以找到tcp綁定的名稱。 這將是對你的文件的底部,它看起來像這樣

<wsdl:service name="PersonService"> 
    <wsdl:port name="NetNamedPipeBinding_IPersonContract" binding="tns:NetNamedPipeBinding_IPersonContract"> 
     <soap12:address location="net.pipe://wcftestpipe/WcfTest/PersonService.svc/test"/> 
     <wsa10:EndpointReference> 
      <wsa10:Address>net.pipe://wcftestpipe/WcfTest/PersonService.svc/test</wsa10:Address> 
     </wsa10:EndpointReference> 
    </wsdl:port> 
</wsdl:service> 

Afther你propably得到一個安全exeception會說你沒有正確的憑證。您可以在您的客戶端的WCF服務和app.config的web.config中將綁定安全模式設置爲NONE。

<bindings> 
    <netNamedPipeBinding> 
     <binding> 
     <security mode="None"/> 
     </binding> 
    </netNamedPipeBinding> 
</bindings> 

希望這有助於