【问题标题】:WCF - Single Web Service Endpoint Using Partial ClassesWCF - 使用部分类的单个 Web 服务端点
【发布时间】:2010-04-01 14:37:00
【问题描述】:

我正在进行的项目需要这样的结构:

{BasePrefix}/Application/{id}/Security/Users/{userId}
{BasePrefix}/Application/{id}/Objects/{objectId}
etc.

Application.svc 最终将成为我的 WCF Web 服务。我试图说服他们这样做:

{BasePrefix}/Security/Application/{id}/Users/{userId}

这将允许我拥有多个 WCF Web 服务,如 Security.svc、Objects.svc 等。

他们仍然希望这一切都在应用程序中,因此我不想将我所有的服务方法都放入一个文件中,而是希望通过功能将其分解并使用部分类将它们全部组合到一个资源中。

我在这里看到了一篇关于如何做到这一点的文章:http://www.meineck.net/2008/04/wcf-hosting-multiple-wcf-services-as.html

但是,该文章中的开发人员正在使用 Net TCP 绑定,因此我不确定这是否适用于 WebHttpBinding 以及 IIS 将如何处理多个资源。

有人做过吗?我链接的文章是一个很好的资源吗?或者有没有更好的替代方法来达到同样的效果?

【问题讨论】:

    标签: c# wcf web-services partial-classes


    【解决方案1】:

    链接文章中的方法是合理的,并且适用于netTcpBinding 以外的绑定(包括webHttpBindingwsHttpBinding 等)。

    但是,我相信您正在尝试使用 URL 重写方案(可能使用 UriTemplate 属性),这与该文章实际讨论的内容略有不同。它是指多个接口由同一个服务创建和实现,并将每个接口映射到其自己的端点

    该方法不适用于单个端点。所以如果你的端点是{BasePrefix}/Application,那只能映射到配置中的一个接口(比如IApplicationService)。

    在您的情况下,我认为您不能采用多接口路线,因为您只需要一个端点。因此,您仍然需要一个带有 all 方法的单一整体接口(丑陋),但理论上您可以使用部分类将这些方法的 实现 拆分为逻辑组。它更好,但并不完全理想。

    您最初的评估是正确的。如果您的方案如下所示:

    {BasePrefix}/Security/Application/{id}/Users/{userId}
    {BasePrefix}/Repository/Application/{id}/Objects/{objectId}
    

    然后您将能够使用其中任何一种方法 - 要么拥有多个服务,要么拥有一个实现多个接口并托管多个端点的服务。

    那篇文章中的代码/配置的真正目的是使单个服务实例能够托管多个端点。这样做的主要原因是如果您不得不在服务之间复制大量代码。不幸的是,这不是您的目标,因此您要么必须更加努力地推动您提议的 URI 方案,要么处理单一的服务合同(接口)并尽最大努力保持实现干净。 #region 指令和/或部分类。

    【讨论】:

    • 我害怕那个。我们已经考虑让我们的代理执行以下 URL 重写: {BasePrefix}/Application/{id}/Security/* 到 {BasePrefix}/Security/Application/{id}/* 我担心执行 URL 重写的性能对每个请求。
    • @Brandon:如果您可以在代理级别做到这一点,那么它可能是一个更好的解决方案。与您在操作中进行的任何数据访问的成本以及通过网络实际传输和接收的成本相比,进行 URL 重写的成本将微不足道。除非你是一个流量高得离谱的网站,否则我不会担心。
    猜你喜欢
    • 2015-08-20
    • 2011-09-27
    • 2015-11-16
    • 2020-11-07
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多