2011-09-12 53 views
5

在WCF和配置(包括編程和通過app.config)上有很多可用的資源。但是,我還沒有看到有關此配置的實際管理的良好資源,特別是在生產環境中。如何配置生產中的WCF客戶端?

WCF功能強大,因爲該框架允許通過app.config文件進行配置,以便您可以調整各種設置而無需重新編譯代碼。

安裝WCF客戶端時,如何輕鬆配置客戶端以指向正確的服務器?這可能是我認爲在安裝後配置的最常見的事情。對於某些上下文,假設我發佈了一個包含服務器組件和客戶端組件的產品。客戶可以在任何地方安裝。雖然xml文件對於後期開發配置非常強大,但它根本不是用戶友好的。鑑於配置文件中可能有幾十個端點,管理員或最終用戶是否必須手動更改所有這些端點?我知道我可以通過編程完成所有事情,但是我基本上都是重新實施所有的開箱即用的管道。

上面的問題,更普遍的是:如何通過一些基本的UI簡化WCF配置而不重新實現框架提供的內容?

+1

如果你真的不喜歡配置文件,你可以在這個app.config的頂部寫一個配置應用程序。畢竟,解析和寫作並不難。 – Carsten

+1

如果您在企業規模 - 請查看[SO-AWARE](http://www.tellagostudios。com/products/so-aware%E2%84%A2) –

+0

@Carsten我認爲一個配置應用程序有點矯枉過正。調整像緩衝區大小等低級設置有希望很少調整事情來解決問題。然而,改變託管服務的服務器名稱這樣簡單的事情更爲常見。 – Travis

回答

3

如果您想用戶友好的安裝,您將使用一些安裝程序您只需設置一些配置值。請檢查作爲Visual Studio一部分提供的安裝程序項目,還是更強大(以及更復雜的)WiX。如果您沒有安裝程序,則已選擇用戶應手動配置所有內容。

如果您唯一的問題是服務地址,並且您計劃將服務和客戶端部署到單個LAN,則還可以添加客戶端能夠在網絡上查找服務的WS-Discovery(available in WCF 4)。

+0

安裝時間很有意義,儘管必須手動替換app.config文件中的元素似乎很乏味和/或容易出錯(特別是在安裝程序中)。你有什麼建議如何做到這一點,或者(更好)如何在運行時做到這一點?發現是一個很好的觀點,但在我的情況下(通過廣域網)不可行。 – Travis

+0

如果您想在運行時執行此操作,您將編寫自己的配置工具 - 既可以是主應用程序的一部分,也可以是主應用程序的第二個應用程序的一部分。我不認爲標準的WCF配置工具可以隨應用程序一起提供。 –

+0

無論如何,我不想發佈標準的WCF配置工具 - 從最終用戶的角度來看,這將是一場噩夢。基本上我只想在運行時替換app.config文件中的客戶端配置的端點主機名。從它的聲音來看,沒有內置的方法來做到這一點。我在創建頻道時正在考慮重寫EndpointAddress屬性 - 我認爲這是我最好的選擇。 – Travis

1

如果您想要編輯這些設置,請使用該用戶界面的用戶輸入內容,並且必須在客戶端創建服務呼叫時使用它,或者設置您在服務器上的託管服務。就我個人而言,我將存儲在數據庫中,並將使用它們以編碼方式在runtine中配置WCF端點。

這也有一些優點,所有備份與數據庫備份,遠程連接和檢查,沒有風險覆蓋更新文件等。

如果你的設置/應用程序沒有數據庫,那麼配置文件也可以,也許是唯一的方法,我不會在註冊表中保存任何東西。

+0

我的問題不在於如何提示/存儲設置,更多關於如何修改WCF在運行時讀取的配置(即,我存儲了設置,如何讓WCF識別)。 – Travis

0

您可以使用settings framework來存儲端點地址。您可以輕鬆讀取和保存設置,並將它們存儲在%APPDATA%位置,因此您無需擔心權限。您只需要一個小配置UI,用戶可以在其中輸入服務器名稱。通過向您的服務器添加簡單的Hello服務來驗證該配置,並嘗試在該用戶界面中訪問該服務。所以如果服務器地址是正確的,你可以給用戶立即反饋。

另一種選擇是實現發現協議。一個相關的問題是here

+0

我的問題不在於如何提示/存儲設置,更多關於如何修改WCF在運行時讀取的配置(即,我存儲了設置,如何讓WCF知道)。 – Travis

相關問題