2011-06-14 36 views
0

我在VS2010與3個項目的解決方案:如何在VS2010中爲主機和客戶端項目維護WCF服務庫?

  • WCFServiceLib - 與WCF服務庫模板創建一個項目。
  • ServiceHostConsole - 使用控制檯應用程序模板創建的項目。
  • ServiceClientConsole - 使用控制檯應用程序模板創建的項目。

VS模板在WCFServiceLib中創建了一個app.config,其中包含我想要公開的服務的所有設置。
ServiceHostConsole具有WCFServiceLib作爲參考並承載服務,但沒有它自己的app.config文件。
如果我嘗試運行沒有app.config的主機項目,它無法託管服務,所以我將app.config從WCFServiceLib移到了ServiceHostConsole。

ServiceClientConsole具有對WCFServiceLib中的服務的服務引用。但是,一旦我將app.config從Lib項目移動到Host項目,我就不能再更新服務引用或添加添加到lib項目中的新服務。
爲了讓客戶端項目查看服務引用,我必須將app.config移回到lib項目中,對客戶端上的服務引用執行更新/添加,然後將app.config移回到主機項目。

請注意,我不能在Service Lib項目和主機項目中保留重複的app.config文件,因爲這會導致主機無法啓動。無論如何,這將是一個糟糕的解決方案,因爲它會在不同的地方創建重複的配置。只改變其中一個可能會產生難以追蹤的問題。

這似乎很奇怪,這app.config文件左右移動需要發生,使主機和客戶端都工作,並且他們不能同時工作。
我相信這肯定是我設置方式的一個問題(儘管我使用默認模板設置了它們),我想一定有更好的方法來解決這個問題。

這個問題就變得時你都在積極開發服務,並需要不斷用更新的服務運行主機和測試客戶端,這個問題看標題很討厭:

你如何保持一個WCF服務VS2010中的庫適用於主機和客戶端項目?

回答

2

WCF服務庫創建一個配置,因爲它由名爲WcfServiceHost.exe的工具使用。如果您嘗試在沒有自己的託管應用程序的情況下對其進行測試,並且根據您的描述進行測試,則此工具託管您的服務,並且在客戶端中添加服務引用時託管該服務(因爲您從移動配置時無法更新引用圖書館)。庫中的配置文件永遠不會被託管應用程序使用,並且不會與託管應用程序使用的配置衝突。

託管應用程序始終需要自己的配置,並且在主機和庫中都有配置應該沒有問題。您不應該從庫本身創建服務引用。一旦你有自己的主機,當你添加服務引用並僅維護主機中的配置時使用它。

有一個小問題。要添加服務引用,服務必須運行。如果客戶端和主機都是同一解決方案的一部分,則必須在不進行調試(或Visual Studio之外)的情況下運行服務,以便能夠將服務引用添加到客戶端。

+0

運行主機應用程序,然後添加服務引用完美無缺!我想我沒有真正理解,當我直接向它添加服務引用時,存在庫的自動託管過程。感謝您的解釋。 – 2011-06-16 21:12:36

+0

「您必須在不調試的情況下運行該服務」。這是一個很大的幫助。在解決方案屬性下,只需將主機設置爲唯一要啓動的項目,然後按ctrl + f5即可。這將在未經調試的情況下啓動主機,並允許您在同一項目中更改客戶端 - 允許您添加服務參考。 – Trevor 2013-02-06 09:06:36

相關問題