我有一个现有的类库,其中包含与我的服务器通信的所有类。 我已经创建了一个WCF服务,它将作为不同应用程序域的一部分托管在我现有的服务器上。由于我已经有了这些类,我认为它可以在我的WCF服务上公开,以减少我的开发时间。
我成功托管了我的WCF服务,并在我的开发者电脑上运行。问题是在客户端添加我的Web服务。他们只能使用我的库的基类。
如何在我的网络服务上提供我的库的基类以外的所有类?例如辅助类,从我的基类继承的子类以及在我的泛型集合中使用的其他类。
我的所有课程都使用Serializable和DataContract属性。
顺便说一下,我的类库是3年前创建的,我只修补了一些新属性,以便在我的Web服务上使用它。
答案 0 :(得分:1)
不属于操作合同一部分的层次结构的辅助类永远不会暴露。对于子类,您可以使用web.config中的<knownType>
部分来指示序列化程序给定基类型的可能子类:
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="SomeNs.MyBaseType, SomeNs">
<knownType type="SomeNs.MyChildType1, SomeNs"/>
<knownType type="SomeNs.MyChildType2, SomeNs"/>
</add>
<add type="SomeNs.MyBaseType2, SomeNs">
<knownType type="SomeNs.MyChildType3, SomeNs"/>
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
WCF将查看作为操作契约一部分的类型(标有[OperationContract]
的方法),它将自动在元数据(WSDL)中公开这些类,以便客户端可以看到它们。可能需要明确指定可能的子类。
此外,您可能会发现此blog post有用。