【问题标题】:Exposing existing class library to WCF service向 WCF 服务公开现有的类库
【发布时间】:2010-07-05 06:16:44
【问题描述】:

我有一个现有的类库,其中包含与我的服务器通信的所有类。 我创建了一个 WCF 服务,它将作为不同应用程序域的一部分托管在我现有的服务器上。因为我已经有了这些类,所以我认为它可以在我的 WCF 服务上公开以减少我的开发时间。

我成功地托管了我的 WCF 服务并在我的开发电脑上运行。问题出在添加我的 Web 服务的客户端上。他们只能使用我的库的基类。

如何使除库的基类之外的所有类在我的 Web 服务上可用?例如辅助类、从我的基类继承的子类以及在我的通用集合上使用的其他类。

我所有的类都带有 Serializable 和 DataContract 属性。

顺便说一句,我的类库是在 3 年前创建的,我刚刚修补了一些新属性以使其在我的 Web 服务上可用。

【问题讨论】:

    标签: c# .net wcf class


    【解决方案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 很有帮助。

    【讨论】:

    • 我正在自行托管我的 wcf 服务。我应该在 App.Config 的哪个部分放置 system.runtime.serialization?
    • 直接在根目录:&lt;configuration&gt;&lt;system.runtime.serialization&gt;...&lt;/configuration&gt;
    • 我将测试您的建议。谢谢!如果这可行,我需要在我的 App.Config 上添加很多类。
    • 谢谢达林!它工作得很好,虽然客户端不能使用我的帮助类,他们现在可以使用我的子类。
    • 我建议您在单独的程序集中外部化您的助手类。这将允许您在客户端应用程序中重用它(当然假设客户端是用 .NET 编写的)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多