了Stian,
感謝您的快速回復。我觀看了米格爾卡斯特羅的截屏視頻,內容非常豐富。不幸的是它並沒有涵蓋銀光的情況。然而,以此爲起點,我能夠得到一些其他人可能認爲有用的工作。
創建兩個程序集:ServerDataContracts和SilverlightDataContracts(這是一個Silverlight程序集)。在每個人的AssemblyInfo.cs中添加以下行:
[assembly: ContractNamespace("http://YourNamespaceUri",
ClrNamespace = "YourDataContractsNamespace")]
所有DataContracts添加到ServerDataContracts組裝。在SilverlightDataContracts程序集中,右鍵單擊項目(或子文件夾)並選擇「添加現有項目」。瀏覽到ServerDataContracts程序集中的DataContracts並選擇要添加的那些。不要打「添加」!請點擊「添加」旁邊的向下箭頭,然後選擇「添加爲鏈接」。這將SilverlightDataContracts項目鏈接到ServerDataContracts項目中的現有文件。現在,當你編輯一個項目時,兩個項目都會得到改變。當您編譯時,這些項目會分別編譯它們的正確目標。
現在添加ServerDataContracts程序集作爲您的服務合同項目的參考。對您的SilverlightDataContracts程序集執行Silverlight應用程序也是如此。當您將Silverlight客戶端的服務引用添加到服務時,它不應該生成數據合同。它應該使用你的程序集中的。
我已經得到了這個工作,但它仍然缺少生成的datacontract類提供的一些功能。生成的類實現INotifyPropertyChanged,在silverlight/wpf中進行數據綁定時非常有用。雖然您可以自己實現這一點,但是這是相當乏味的,現在您的服務器代碼必須在每個屬性集上執行所有這些事件處理程序,即使您可能永遠不會訂閱服務器上的PropertyChanged事件。
我仍然在尋找一種更清潔的方式來處理這個問題。它看起來像silverlight 4將使這更容易,因爲您可以在客戶端和服務器中使用相同的程序集(編譯代碼是兼容的)。不幸的是,這對我的需求來說太遙遠了。
這應該是真的被添加到您的問題作爲額外的信息。 – ChrisF 2010-02-18 22:23:54