2010-10-02 75 views
1

我有2個合同(cA & cB)由具有2個端點(epA & epB)的單個WCF服務實現。通過端點形成WCF服務

這是出於安全目的,而純粹是爲了清晰/組織的原因,我想只有「看」 ContractA的操作時,我發現通過endpointA服務;同樣,只能通過endpointB查看ContractB的操作。

我不需要「保護」這些操作本身。這種情況是這樣的,任何給定的客戶端只需要服務的一個「方面」,而不是兩個(但是,操作本身共享資源,因此具有單個服務而不是2個服務是有意義的)。

似乎任何給定的服務基本上都獲得1個WSDL,所有操作都暴露給所有端點。這是它的工作方式,還是有辦法通過阻塞未由端點合同定義的操作來「塑造」端點?

回答

1

默認情況下,您是對的 - 一個服務實現類獲取一個WSDL,其中包含此服務類實現的所有服務方法(來自所有服務合同)。 (以我所知)以任何(簡單)的方式「塑造」WSDL沒有任何方法--WCF確實提供了進入創建WSDL(靜態或動態)過程的方法,但是那些不是因爲心靈的懦弱。將服務契約的實現分成兩個單獨的類,然後你將擁有兩個單獨的服務,單獨的WSDL和所有的服務,將會容易得多。

1

Marc是絕對正確的。我只是添加爲什麼這發生在WCF中。在WCF中,所有與元數據相關的功能都基於服務元數據行爲和mex端點。這兩個功能都是在服務級別上定義的。所以你不能採取更高的粒度(除非你寫了很多自定義代碼)併爲每個端點指定元數據。

WCF服務(類)直接映射到wsdl:service元素,它將每個合約公開爲單獨的wsdl:port(在WCF中稱爲端點)。這是回答你的問題的要點。如果你不想在你的第二個合同中使用wsdl:service,你不能在同一個類中實現它。

你已經提到你的服務合約共享資源。在這種情況下,您的WCF服務可能還包含業務邏輯。這是你的問題的原因。用於實現WCF服務的良好設計是僅將它們創建爲獨立業務邏輯類的包裝。

+0

你說得對,我的WCF操作直接執行業務邏輯。我沒有考慮將服務操作作爲商業類的包裝來實現,但我現在意識到這在很多方面會好很多,所以感謝這個建議。 – with 2010-10-03 19:58:11