2011-02-04 35 views
3

我已經使用.Net Reflection.Emit創建動態類及其字段。現在,當我在啓用了silverlight的WCF服務中使用此動態類對象的通用列表時,它在參考端會給我一個錯誤。服務引用不知道這個動態創建的類型。這是我能想到的。我對此不確定嗎?任何機構對於如何用DataContract及其帶有DataMember的字段來裝飾這個動態創建的類有什麼想法?運行時將DataContract和DataMember添加到使用.Net反射創建的Dynamic Class

回答

2

即使你添加DataContractDataMember屬性使用Reflection.Emit的在運行時,不能包括在服務元數據和客戶端發現合同中創建一個類,只是通過增加這些屬性,因爲創建服務元數據步驟通過在服務有機會運行之前檢查合同參數和返回值並創建服務描述來完成。

一個簡單的辦法是在服務操作中使用弱類型化的參數,如XElementMessage類直接

IE:

void SomeOperation(XElement parameter); 
void SomeOtherOperation(Message message); 

一個不太簡單的選擇,就是使用自定義元數據行爲以及爲動態生成的類導出元數據,方法是執行IWsdlExportExtension以導出自定義元數據。這工作假設類前向服務和相同的類結構的任何呼叫在每個應用程序運行產生生成(所以可能不是一個合適的選擇)

+0

我認爲你是對的。但是我在代碼中做了更改,使其更簡單,避免了這種複雜的編程。感謝您的建議。 – 2011-06-09 07:19:26

0

你可能想調用PropertyBuilder.SetCustomAttribute與基於空DataMemberAttribute構造一個CustomAttributeBuilder。類似於TypeBuilder的東西。

相關問題