3

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

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

我对为什么必须添加 a 类型然后将另一种类型指定为刚刚添加的该类型的子类型感到困惑。在我看来,您只需添加“联系人”类型,指定其程序集;“主机”就是这样。为什么 knownType 元素标签跟在指定另一种类型的添加类型元素标签之后?另外,一旦我正确设置了配置文件,我何时以及如何从我的 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
4

1 回答 1

2

如果要在配置中指定已知类型,请按照您提到的这个示例进行操作:

<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 客户端的应用程序)。只需将条目放入配置中,WCF 将处理其余部分。

基本上,您在这里所说的是:任何从我的程序集中具有 a 的方法ContactHost可能Customer从我的MyClassLibrary程序集中返回 a 。

所以基本上,您定义MyClassLibrary.Customer的最有可能是Host.Contact.

这与在数据合同上定义相同:

[DataContract]
[KnownType(typeof(Customer))]
class Contact
{...}

你有一个 object class Contact,但在你使用它的任何地方,它也可以是一个Customer类实例。

于 2010-03-09T15:15:29.840 回答