我的客户端/服务器应用程序使用 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);
}
有人可以解释一下我该怎么做吗?
EDIT请理解,我试图在运行时动态设置已知类型,而不是在配置中以声明方式或在源代码中使用属性。
这基本上是一个关于 WCF API 的问题,而不是一个风格问题。
EDIT 2 这个 MSDN 页面页面状态:
您还可以将类型添加到 ReadOnlyCollection,通过 DataContractSerializer 的 KnownTypes 属性进行访问。
不幸的是,这就是它所说的全部内容,并且考虑到 KnownTypes 是一个只读属性,并且该属性的值是一个,所以它没有多大意义。ReadOnlyCollection
.