2010-01-27 58 views
2

我目前需要從Silverlight(3.0)應用程序中訪問WCF服務,但我需要它動態的。
我可以訪問的內容:服務接口(ServiceContracts)和數據定義(DataContracts)。
我需要什麼:運行時生成/創建的WCF客戶端代理。Silverlight中動態WCF客戶端代理的解決方案?

有一些解決方案嗎?

+0

爲什麼你需要一個動態代理?你只是想動態設置代理的端點? – slugster 2010-01-27 10:44:06

+0

那麼,我需要整個代理是動態的,所以我可以擺脫設計時生成的代理。 – fredlegrain 2010-01-27 10:58:52

+0

回答「爲什麼」的問題:我有一個動態的WCF主機提供了在運行時提供的服務,我有一個運行插件的客戶端平臺,通過客戶端平臺調用服務,我只想共享服務描述,我計劃共享在.Net客戶端和Silverlight客戶端上的這些相同的服務描述。我希望這是有道理:) – fredlegrain 2010-01-27 11:32:19

回答

1
+0

謝謝。 我已經看過這個,但這並不容易移植到Silverlight。 我正在尋找Silverlight-ready解決方案...如果此刻有任何問題:) – fredlegrain 2010-01-27 11:07:49

+0

+1感謝您的鏈接!這幫助我解決了類似的問題! :D – khr055 2011-03-31 20:42:38

-1

我的理解是,如果按照Understanding WCF Services In Silverlight 2中描述的客戶端訪問過程,您應該能夠選擇在運行時訪問哪個服務,因爲您不需要在客戶端創建代理。

一個從這篇文章片段:

現在我們可以把我們的關注 客戶端應用程序。首先,讓我 提醒大家, 你應該永遠不要使用「添加服務 參考」在Visual Studio中爲 神奇服務客戶端創建。 代碼非常詳細,難以管理,編輯很容易被覆蓋,而且幾乎總是用 作爲藉口,實際上並不是 學習WCF。

正如我已經提到很多次, WCF依賴於ABC的概念。 對於 .NET和Silverlight,您在渠道工廠合併 地址和與合同 的綁定以創建 渠道。這不只是看中 概念設計師講,這是 您的代碼將看起來完全像什麼 (真的好 建築的標誌!)下面是.NET 版本的我的意思:

BasicHttpBinding basicHttpBinding = new BasicHttpBinding(); 
EndpointAddress endpointAddress = new EndpointAddress("http://localhost:1003/Person.svc"); 
IPersonService personService = new ChannelFactory<IPersonService>(basicHttpBinding, endpointAddress).CreateChannel(); 

Person person = personService.GetPersonData("F488D20B-FC27-4631-9FB9-83AF616AB5A6"); 
+0

正如他所說,這是「.NET版本」。 Silverlight只支持異步服務調用,大多數服務不提供異步調用的接口(以及他們不應該使用的IMO)。從那時起,事情變得更加棘手。 – fredlegrain 2010-03-12 08:11:18

+0

我期望的更像是K.Kozmic在.Net中所做的事情:請參閱 http://kozmic.pl/archive/2009/08/09/making-asynchronous-wcf-calls-without-svcutil.aspx – fredlegrain 2010-03-12 08:15:09