Dot-Net
如何以程式方式配置 WCF 已知類型?
我的客戶端/伺服器應用程序使用 WCF 進行通信,這非常棒。然而,目前架構的一個缺點是我必須對某些傳輸類型使用已知類型配置。我使用的是內部 Pub/Sub 機制,這個要求是不可避免的。
問題是很容易忘記添加已知類型,如果你這樣做了,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 的問題,而不是樣式問題。
編輯 2 這個 MSDN 頁面頁面狀態:
您還可以將類型添加到通過 DataContractSerializer 的 KnownTypes 屬性訪問的 ReadOnlyCollection。
不幸的是,這就是它所說的全部,並且鑑於 KnownTypes 是一個只讀屬性,並且該屬性的值是 a ,它並沒有多大意義
ReadOnlyCollection。
添加
[ServiceKnownType]到您的[ServiceContract]界面:[ServiceKnownType("GetKnownTypes", typeof(KnownTypesProvider))]然後創建一個名為
KnownTypesProvider:internal static class KnownTypesProvider { public static IEnumerable<Type> GetKnownTypes(ICustomAttributeProvider provider) { // collect and pass back the list of known types } }然後你可以傳回你需要的任何類型。