2008-10-31 51 views
1

我們目前已經開發了一個使用WCF的應用程序。我們的客戶端連接到位於服務器上的不同WCF服務主機,並且服務主機從客戶端需要的數據庫返回數據。標準模型。但是,這個當前的設計在客戶端和服務器端都有app.config文件中的所有WCF數據。我們希望使其更具動態性,並將所有數據(包括端點,合同和綁定)移到數據庫中。如何使用動態WCF處理對象?

現在的問題是我們如何檢索這些數據並正確訪問它。我們已經在設計中使用了配置文件中定義的端點,並且使用該端點,我們可以調用它來獲取我們需要的其餘端點信息(即所有綁定,合同和不同的端點,它曾經在其app.config中定義過)。客戶端和服務器端都是這種情況。

我現在正在努力解決的問題是如何針對這些動態端點進行編碼?當客戶端調用服務主機時,它不僅會對服務主機進行簡單調用,而且還會根據需要檢索並傳回對象以供服務主機處理。例如,在表單加載中,我們可以從數據庫中檢索包含所有當前定義設置的對象,然後用戶在fornm上執行任何操作,然後將更新的對象傳回給servicehost。我們現在可以這樣做,因爲在Visual Studio 2008中,我們添加了所有的服務引用,它們自動生成了可以從servicehosts調用和檢索的方法和對象。如果我們轉向動態端點連接,我們如何在開發階段獲取這些數據?

我以前在.NET 2.0中使用.NET Remoting開發了一個類似的應用程序,我們在其中來回傳遞對象,客戶端和服務器都使用相同的對象定義類來了解對象。我不確定我們會如何去做這個與WCF。

回答

0

定義你的綁定,然後使用它來實例化客戶端。

BasicHttpBinding basic = new BasicHttpBinding(
     BasicHttpSecurityMode.TransportCredentialOnly); 
basic.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm; 
EndpointAddress serviceAddress = new EndpointAddress(
     "http://whatever/service.svc"); 
YourServiceClient m_client = new YourServiceClient(basic, serviceAddress); 
+0

如果我知道'YourServiceClient'是什麼類型,這是有效的。我遇到的問題是當類型從數據庫返回時,並且在實例化時不知道。 – Noah 2009-02-19 17:30:32

0

您不必依賴app.config文件來配置服務,您可以在運行時配置服務,例如從數據庫獲取綁定,端點或行爲來配置servicehost對象。

但是,服務,數據或消息合約應該在解決方案或Web引用中編碼,否則會通過大量使用反射和大量複雜性來降低性能,從而實現整個動態功能。

在您的場景中,我猜想可以通過其他方式完成,例如,處理通用消息。實現處理請求中的任何消息數據的邏輯。 希望通過閱讀關於如何處理來自客戶端和服務器的任何消息的文章,您可以獲得更多的想法。

http://msdn.microsoft.com/en-us/library/aa395208.aspx