如何从外部配置文件添加服务已知类型

时间:2010-03-09 14:00:10

标签: wcf configuration known-types

我很难理解如何完全添加已知类型;对于WCF,来自我wcf外部的配置文件。我找到了一个如何设置配置文件的示例,但是,我对文件的设置方式有点困惑,我不确定我实际上应该如何调用此配置文件来加载服务我wcf的已知类型。以下是包含已知类型的配置文件示例。

http://codeidol.com/csharp/wcf/Data-Contracts/Data-Contract-Hierarchy/

我很困惑为什么你必须添加一个类型,然后指定另一个类型作为刚刚添加的那个类型的子类。在我看来,你只需添加“联系人”类型,指定其组装; “主持人”就是这样。为什么knownType元素标签跟在指定其他类型的add type元素标签之后呢? 此外,一旦我正确设置配置文件,何时以及如何从我的wcf调用它?任何援助将不胜感激。谢谢!

更新1: **好的,这让我有了更好的理解,谢谢。我确实尝试了你所说的,并且找不到ServiceKnownTypes。我在App.config文件中唯一不同的是在我的服务中,主机是我没有任何kn​​ownType 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

1 个答案:

答案 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类实例。