我很难理解如何完全添加已知类型;对于WCF,来自我wcf外部的配置文件。我找到了一个如何设置配置文件的示例,但是,我对文件的设置方式有点困惑,我不确定我实际上应该如何调用此配置文件来加载服务我wcf的已知类型。以下是包含已知类型的配置文件示例。
http://codeidol.com/csharp/wcf/Data-Contracts/Data-Contract-Hierarchy/
我很困惑为什么你必须添加一个类型,然后指定另一个类型作为刚刚添加的那个类型的子类。在我看来,你只需添加“联系人”类型,指定其组装; “主持人”就是这样。为什么knownType元素标签跟在指定其他类型的add type元素标签之后呢? 此外,一旦我正确设置配置文件,何时以及如何从我的wcf调用它?任何援助将不胜感激。谢谢!
更新1: **好的,这让我有了更好的理解,谢谢。我确实尝试了你所说的,并且找不到ServiceKnownTypes。我在App.config文件中唯一不同的是在我的服务中,主机是我没有任何knownType type =“...”来指定。这是我的一瞥。你知道我做错了什么吗?
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type = "Data,TestService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=57f2af9570299a17"/>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
很抱歉将此帖发布到评论部分,我希望这更清楚。**
更新2: 这是我想要完成的事情。你有什么想法?
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/6b70e9f4-52bc-4fa9-a0ff-c0859e041e85?prof=required
答案 0 :(得分:2)
如果要在config中指定已知类型,请按照您提到的示例进行操作:
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type = "Contact,Host,Version=1.0.0.0,Culture=neutral,
PublicKeyToken=null">
<knownType type = "Customer,MyClassLibrary,Version=1.0.0.0,
Culture=neutral,PublicKeyToken=null"/>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
您不必执行任何操作 - 您无需“加载”配置或任何内容 - WCF将为您执行此操作。您需要将它放入您的web.config(如果您在IIS中托管服务,如果您的客户端是Web应用程序),或者在您的应用程序配置中(如果您在服务器端有Windows服务,或者控制台) / winforms app在客户端)。只需将条目放入配置中,WCF将处理其余的内容。
基本上,您在这里说的是:我的Contact
程序集中Host
的任何方法也可以从我的Customer
程序集中返回MyClassLibrary
基本上,您定义MyClassLibrary.Customer
很可能是Host.Contact
的后代类型。
这与定义数据合同相同:
[DataContract]
[KnownType(typeof(Customer))]
class Contact
{...}
您有一个对象类Contact
,但无论您在何处使用它,它实际上也可能是Customer
类实例。