我的客戶機/服務器應用程序使用WCF進行通信,這一直是很大的。然而,目前架構的一個缺點是我必須對某些傳輸類型使用已知類型的配置。我正在使用內部的Pub/Sub機制,這個要求是不可避免的。如何配置WCF已知類型的編程?
的問題是,它很容易忘記添加已知的類型,如果你這樣做,WCF默默的一些線索,以什麼地方出了錯失敗。
在我的申請,我所知道的集合,將要發送的類型。我想通過App.config
文件,該文件目前包含這樣的編程方式進行配置,而不是聲明:
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="MyProject.MyParent, MyProjectAssembly">
<knownType type="MyProject.MyChild1, MyProjectAssembly"/>
<knownType type="MyProject.MyChild2, MyProjectAssembly"/>
<knownType type="MyProject.MyChild3, MyProjectAssembly"/>
<knownType type="MyProject.MyChild4, MyProjectAssembly"/>
<knownType type="MyProject.MyChild5, MyProjectAssembly"/>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
相反,我想要做這樣的事情:
foreach (Type type in _transmittedTypes)
{
// How would I write this method?
AddKnownType(typeof(MyParent), type);
}
燦有人請解釋我可能如何做到這一點?
編輯請理解,我試圖在運行時動態設置已知類型,而不是在配置中使用聲明或在源代碼中使用屬性。
這基本上是一個關於WCF API,而不是一個風格問題的問題。
EDIT 2This MSDN page頁面狀態:
您也可以種添加到ReadOnlyCollection,通過DataContractSerializer的的KnownTypes屬性訪問。
不幸的是這一切都表示,並沒有做出非常多的意義因爲KnownTypes是一個只讀屬性,屬性的值是一個ReadOnlyCollection
。
在您的編輯2:我想他們的意思是,你可以在額外通過DataContractSerializer的構造經過已知類型。儘管如此,這對WCF本身並沒有太大的幫助。 – 2009-04-21 15:07:23