2015-04-02 80 views
0

我已經在Visual Studio 2013中使用C#創建了一個WCF服務,並將其託管在IIS服務器上。我在新的WPF客戶端中使用服務時遇到問題,因爲在添加服務引用後端點缺失。C#IIS託管的WCF服務不會生成客戶端端點

我可以使用URL訪問服務,它給了我一個說明頁面,指出我需要創建一個客戶端來測試服務。該URL可以在服務器和我的筆記本電腦上運行。 WSDL確實存在,我可以查看XML結構。 Visual Studio允許我使用WSDL URL添加服務引用,並且正確生成代理客戶端代碼。

添加服務引用不會將任何端點添加到我的客戶端的App.Config文件。 WSDL中的Ctrl-F顯示WSDL中沒有任何端點數據。由另一個部門託管的另一項服務的WSDL確實包含了他們的端點,所以我知道它們應該以這種方式列出。

我能做些什麼來使WSDL自動將端點配置添加到客戶端?我不想記住每個新客戶端的端點,也不需要每次使用該服務的其他人請求我。

this MSDN article我試過添加一節並重復該節中的端點,重新構建了我的服務,重新啓動了IIS服務器上的主機網站,並更新了我的服務引用,但端點仍未添加。

當我在「添加服務引用」對話框中使用Discover選項時,它確實找到了服務項目,但給出了錯誤,指出該URL不正確。只有樣板服務信息的另一個測試解決方案適用於該解決方案中的客戶端項目,並將端點添加到客戶端配置中。它沒有Web.Config中的任何內容,我遇到的服務沒有。

可能重複this question,但它沒有得到答覆。

這裏的web.config的從我的主機網站的相關部分(該服務的App.Config中是相同的):

<system.serviceModel> 
<client> 
    <endpoint binding="webHttpBinding" 
      contract="TestLib.Service.ITestLibService" /> 
</client> 
<services> 
    <service name="TestLib.Service.TestLibManager"> 
    <endpoint binding="webHttpBinding" contract="TestLib.Service.ITestLibService" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<bindings> 
    <webHttpBinding> 
    <binding> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows" proxyCredentialType="Windows"/> 
     </security>   
    </binding> 
    </webHttpBinding> 
</bindings> 
<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <serviceMetadata httpGetEnabled="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

任何幫助表示感謝,謝謝!

回答

0

答:基於SOAP的使用終端的綁定,而不是基於REST

端點綁定有兩種不同的類型:SOAP和REST。只要服務具有不同的地址,您的服務就可以包含在web.config文件中,但只有SOAP端點將列在WSDL中。沒有其他設置或配置需要,服務會自動獲取此信息,只要它是受支持的類型。

webHttpBinding是一個基於REST的端點綁定。對於使用該服務的JSON/JavaScript客戶端來說,它將工作得很好,但不會在WSDL中列出。

basicHttpBinding是一個基於SOAP的端點綁定。它對於C#客戶端來說很好。如果您使用Visual Studio添加服務引用,它將自動將這些端點添加到您的app.config文件中,因爲該信息在WSDL中列出,所以它可以執行此操作。

感謝@nodots讓我指出了正確的方向。

相關問題