簡體   English   中英

使用ChannelFactory調用wcf服務的好處是什么

[英]what is the advantage of using ChannelFactory to call wcf service

如果我知道服務URL,則可以單擊添加引用並添加服務URL以在客戶端創建代理以使用它,但是無需在客戶端創建代理,我們可以在ChannelFactory的幫助下使用和調用服務。

所以我想知道人們何時會在運行時使用ChannelFactory創建代理,這有什么好處?

如果我想讓其他人知道我的服務網址,那么他們也將無法將我的服務添加為添加服務參考。...如何啟用此功能? 我希望其他人如果知道我的服務網址,將無法在其末尾創建代理。 我希望人們總是必須使用ChannelFactory來調用ny服務。 請詳細討論此問題。 謝謝

我使用ChannelFactory而不是自動生成的代理在服務器端和客戶端上使用相同的對象模型。 同樣在這里, 在WCF服務和客戶端之間共享接口(標記為ServiceContract)與自動生成的代理有關的一些問題也被討論了。

至於隱藏元數據,答案可能就在這里。 如何在WCF上隱藏wsdl信息?

我通常創建兩個程序集,一個使用服務元數據(接口[服務合同]和數據對象[datacontracts]),另一個使用實際的服務實現。

通常,我會自行托管wcf服務,並跳過沒有元數據的客戶端所需的DataExchange端點服務(用於創建代理)。 客戶端接收我的元數據dll並編寫自己的代理,或將自定義庫與元數據dll一起使用以創建代理。 兩種方法都使用channelfactory創建代理。 如果在LAN環境中使用服務,我通常會設置發現服務,以便客戶端可以找到特定服務接口(自定義庫代碼)的服務url。

也許我只是個老派,但我喜歡對過程進行控制。 版本問題等等。 另一個原因是,當使用一種以上的技術方式時,我將重點放在最能從中學習到有關技術的方式上。

如果要快速測試服務或對WCF編程模型不滿意,也許應該在Visual Studio中使用IIS和服務頁面(SVC)以及自動代理創建。 如果您編寫自己的服務庫並且需要更細粒度的通信控制(公共服務發現策略,公共配置/公共綁定設置,公共安全設置,掛接到通信堆棧中的事件以運行自定義代碼等),請使用Channelfactory。

如果您有不是.NET的任何客戶端(例如,像Java或PHP), ChannelFactory將不適用於它們,因為該客戶端特定於.NET和WCF。 在那種情況下,您要么必須發布元數據,要么向客戶端發送WSDL,以便他們可以通過他們選擇的語言使用的任何方式來創建代理(我對Java,PHP等不是很了解,所以我可以)不能說那么多)。

至於使用ChannelFactory ,我假設您正在談論ChannelFactory<T> ,因為ChannelFactory本身是一個抽象類,無法實例化。 使用Channel Factory可以提供更大程度的控制(如其他人所指出的)-對於ChannelFactory<T> ,客戶端將需要服務合同(接口,而不是實現),因此可以使用所有人共享的通用程序集或提供接口對客戶而言,這是實現此目標的兩種最簡單的方法。

您可以通過將<serviceMetadata>標記中的配置文件中的httpGetEnabled為“ false”來禁用發布元數據(WSDL):

<system.serviceModel>
  <behaviors>
    <serviceBehavior>
      <behavior name="MyServiceBehavior">
        <serviceMetadata httpGetEnabled="false" />
      </behavior>
    </serviceBehavior>
  </behaviors>
</system.serviceModel>

然后,您可以通過將端點元素的behaviorConfiguration屬性設置為“ MyServiceBehavior”來引用此行為。

您還應該刪除任何mex終結點,因為(根據我的理解)這是Web服務公開其元數據的新方法。 如果未公開元數據,那么客戶端將無法通過WSDL構建代理,而將不得不通過其他方法進行構建。 .NET客戶端特別不能使用“添加服務參考”。

最后,如果您擔心對服務的訪問,則應該真正實現某種身份驗證方案。 如果您只是想禁用發布(公開)元數據,則將httpGetEnabled設置為false並刪除任何mex端點即可解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM