2013-04-04 97 views
3

我在業餘時間一直與這個人一起奮鬥了幾周,決心不轉向這個美妙的社區。但我的精神被打破了。所以...WCF TCP端點無法添加服務參考

我已經創建了一個WCF服務,並且試圖將其託管在控制檯應用程序中,以便使用TCP端點。

我有一個項目,其中包含合同和svc文件。 我有另一個項目,其中包含一個控制檯應用程序,它引用了第一個提到的項目。 我的控制檯應用程序的主要方法是這樣的:

using (ServiceHost host = new ServiceHost(typeof(LicenceBucketWireService.LicenceBucketService))) 
{ 
    host.Open(); 

    foreach (var endpt in host.Description.Endpoints) 
    { 
     Console.WriteLine("Enpoint address:\t{0}",endpt.Address); 
     Console.WriteLine("Enpoint binding:\t{0}",endpt.Binding); 
     Console.WriteLine("Enpoint contract:\t{0}\n", endpt.Contract.ContractType.Name); 
    } 
    Console.ReadLine(); 
} 

,不外這一點,一切都是花花公子:

enter image description here

它,當我嘗試添加該服務引用就會出差錯服務到第三個完全獨立的應用程序,它將消耗該服務。當我嘗試添加一個參考,使用的net.tcp://本地主機:49189/LicenceBucketWireService/LicenceBucketService/MEX的地址發現的細節,我得到一個錯誤:

The URI prefix is not recognized. Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService/mex'. Metadata contains a reference that cannot be resolved: 'net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService/mex'. If the service is defined in the current solution, try building the solution and adding the service reference again.

控制檯應用程序運行時,我執行此任務。 該應用程序的配置具有以下元件:

<system.serviceModel> 
    <services> 
     <service name="LicenceBucketWireService.LicenceBucketService"> 
     <clear /> 
     <endpoint address="mex" binding="mexTcpBinding" contract="LicenceBucketWireService.ILicenceBucketService" 
      listenUriMode="Explicit"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="net.pipe://localhost/licenceBucketService" 
      binding="netNamedPipeBinding" bindingConfiguration="" contract="LicenceBucketWireService.ILicenceBucketService" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:49187/LicenceBucketWireService/LicenceBucketService" /> 
      <add baseAddress="net.tcp://localhost:49189/LicenceBucketWireService/LicenceBucketService" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services>  
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <!-- To avoid disclosing metadata information, set the values below to false before deployment --> 
      <serviceMetadata httpGetEnabled="false" /> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
+0

在服務配置文件中將'httpGetEnabled'屬性更改爲true。 – 2013-04-04 14:50:26

回答

5

的代碼在配置文件中的下面的行:

<endpoint address="mex" binding="mexTcpBinding" contract="LicenceBucketWireService.ILicenceBucketService" 
      listenUriMode="Explicit"> 

應具有合同爲「IMetadataExchange接口」,而不是LicenceBucketWireService.ILicenceBucketService。

這應該照顧這個問題。

+0

非常感謝。我太親近了! – onefootswill 2013-04-05 10:19:06

+0

非常感謝siddharth.It也解決了我的問題。 – 2015-12-22 06:49:47