2016-12-27 79 views
0

我是新來的WCF服務。我知道三種生成代理的方法。選擇我們應該採用哪種類型的WCF代理生成路徑?

  1. 使用服務參考
  2. 使用SvcUtil工具
  3. 使用ClientBase

但我很困惑在這種情況下,我應該使用哪種類型。在我的情況下,我必須爲我沒有服務代碼的第三方服務生成代理。我不想使用添加服務引用,因爲它給我下面的問題。在這stackoverflow question提到。所以我想使用clientBase。但是我認爲如果不使用服務引用就不能使用它。我們應該在什麼時候選擇哪種代理服務器時感到困惑。

+0

那麼不要將服務引用添加到您的庫項目,只有您的應用程序 – MickyD

+0

在這種情況下,我必須在多個地方添加服務引用,因爲我會有多個應用程序使用此服務。我不認爲它的好方法。 – TBAG

+0

啊,我沒有意識到,看到我的回答如下 – MickyD

回答

0

在我的情況下,我必須爲我沒有服務代碼的第三方服務生成代理。

我將有多個應用程序使用此服務。

在這種情況下,你最好使用SvcUtil工具,因爲它可以生成一個庫,所有你的項目都可以使用,即使是.NET庫。生成後,您可以隨時進入並調整它。

,另一方面添加服務引用是罰款單個.exe但正如你所發現的,是惱人的多個應用程序,你需要重複的過程,你結束了WCF類型是多重定義只是要增加維護。

只要確保將WCF客戶端配置保留在應用程序的app.config中,而不是您的類庫的app.config(因爲前者可能不會被讀取)。

如果您的供應商遵循了WCF the Manual Way… the Right Way它會讓您的生活更輕鬆。

然而,SOAP純粹主義者會爭辯說,供應商提供的唯一東西是SOAP WSDL XML文件,無論如何您都需要從中生成類型。 (不幸的是,在.NET中的默認行爲是背對背)

+0

只有當我是服務的所有者時才能使用ClientBase。這是對的嗎? – TBAG

+0

那麼,你通常需要服務接口類型,除非供應商提供它,否則你只需使用客戶端代理生成過程中生成的那個,到那時爲時已晚。你可以使用既定的代碼。如果供應商以.NET客戶端庫的形式爲您提供API,則可以使用具有所提供接口的「ClientBase」創建自己的代理。但這聽起來並不像他們那樣做。要回答你的問題,任何人都可以使用'ClientBase',但你首先需要服務合同 – MickyD

+0

使用Svcutil生成代理後我仍然得到'合同'屬性無效 - 值'xxx'根據其數據類型'clientContractType' - 枚舉約束失敗。 – TBAG

相關問題