我跟隨此answer從一個不同的問題,試圖讓我的WCF服務只處理GET請求。我已將[WebGet]
添加到我的操作中,添加了端點行爲<webHttp />
,將默認端點更改爲使用所述行爲,並將默認端點的綁定更改爲webHttpBinding
。WCF服務參考不包括綁定和客戶端端點
的web.config的system.servicemodel樣子:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="TestServiceLibrary.TestService">
<endpoint behaviorConfiguration="webBehavior"
address=""
binding="webHttpBinding"
contract="TestServiceLibrary.ITestService" />
<endpoint
address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
這使我的服務調用,如:TestService.svc/GetData?value=x
和偉大工程。現在我想將一個服務引用添加到客戶端項目。當我這樣做時,客戶端項目的app.config文件不會獲得配置的綁定和客戶端端點。如果我刪除了上述行爲webBehavior
,請將默認端點綁定更改爲wsHttpBinding
,然後重新添加客戶端的服務引用 - 客戶端綁定和端點已成功添加,但我失去了GET支持。
我知道我可以使用wsHttpBinding
保留默認端點,並用不同的地址設置爲綁定webHttpBinding
與<webHttp />
行爲添加一個終點,但我真的很喜歡的客戶端應用程序使用GET是。
編輯:
我也有興趣在爲什麼失敗配置在這種情況下進行更新。我想讓這項服務的消耗低摩擦(通過Visual Studio添加服務參考,然後開始撥打電話),因此手動設置客戶端配置文件並不理想。
感謝您的回答。我知道這聽起來很挑剔,但我真的希望它是一個低摩擦的考驗,以消費這項服務,並且不得不手動設置配置文件將會太多,以至於不能問一些想要使用這個的各方。我想我應該修改我的問題,包括我也有興趣瞭解爲什麼通過Visual Studio添加服務引用在此情況下不包含配置。 – Ethan
如果你自己實現wcf客戶端(就像我建議的那樣),你也可以在代碼中設置所有這些設置。 – pepo
對不起,但我真的試圖避免任何手動重複的客戶端配置,即使它在代碼中。自從Visual Studio在一種情況下優雅地處理配置,然後在另一種情況下完全沒有處理配置時,我很難在這一點上繼續前進。 – Ethan