2010-03-19 125 views
3

我正在開發一個.NET應用程序,它將同時擁有WinForms和Silverlight客戶端。雖然大部分代碼都在服務器中,但我還需要在客戶端有相當多的邏輯,並且我希望保持客戶端庫代碼相同。.NET和Silverlight應用程序之間的共享WCF客戶端代碼?

從我到目前爲止所瞭解的情況來看,我需要有兩個不同的項目類型,一個類庫和一個Silverlight類庫,並將這些文件從一個項目鏈接到另一個項目。這看起來很蹩腳,但它適用於簡單的代碼。

我的問題,不過,是由svcutil.exe的產生訪問WCF服務的代碼是從由slsvcutil.exe生成的代碼不同,Silverlight的代碼是使用.NET實際不符一:當我嘗試將類導入到.NET中時,System.ServiceModel.Channel類遇到一些問題。

以前有人做過類似的事嗎?我究竟做錯了什麼?

回答

2

不幸的是,從Silverlight 3和.NET 3.5sp1開始,就沒有二進制兼容性。您必須共享文件,並維護兩個獨立的庫。

然而,Silverlight 4和.NET 4將提供某種程度的二進制兼容性。根據您在客戶端使用的程序集,您可以在Silverlight和Windows Forms中使用相同的組件。

+0

但是,即使沒有二進制兼容性,Silverlight庫是不是.NET的子集?在這種情況下,我的Silverlight代碼是不是也可以在.NET 3.5下編譯? – 2010-03-19 18:56:33

+1

這不是一個嚴格的子集,所以沒有。 :-(我通常使用部分類和預處理器指令來解決這個問題,儘管如此。 – 2010-03-19 20:28:15

+0

謝謝Alun,我正在尋找的東西。 – 2010-03-20 15:30:04

0

不要在不同客戶端之間共享一個代理客戶端 - 爲每個客戶端生成代理。

您可以重複使用添加的項目之間的數據類作爲鏈接您描述的方法。如果在代理中創建了新版本的類,那麼您可以編輯生成的代理代碼文件並刪除類定義。當你編譯它時,每個客戶端(Windows應用程序和silverlight)都會有自己的編譯類庫版本,但它們都來自相同的源代碼。

2

我知道現在提供解決方案爲時已晚,但也是我的問題,我找到了Portable Class Libraries。這是您的問題的完美解決方案。

+0

是啊,我已經使用它很長一段時間了,偉大的產品! – 2012-07-19 17:00:07

相關問題