【问题标题】:How to expose a service layer to UI components如何向 UI 组件公开服务层
【发布时间】:2011-05-17 15:15:04
【问题描述】:

我们有一个应用程序,我们在其中创建了一个服务层,其中包含大部分业务逻辑和实用服务(日志记录、异常、缓存等)。我们必须找到一种方法来将此服务作为 API 公开给 UI 组件。以下是我们的一些要求:

  • 我们想创建多个 基于服务的组件。
  • 我们希望第三方开发商 使用我们的服务来创建他们的 拥有组件或利用我们的数据。
  • 对于可扩展性,我们希望拥有 多个实例安装在 不同的盒子。同样有 可能不仅仅是一个实例 相同的 UI 组件。

公开服务层的一种方法是将其托管在基于 REST 的 WCF 层下。

另一种方法是将服务托管在 ASP.Net MVC 项目的模型层中。 UI 组件将托管在它们自己的 MVC 项目中。 UI组件视图中的Javascript会直接调用服务项目的控制器。

WCF 应该是非常重量级的选项。另一方面,我不太相信 MVC 方法,因为我觉得这不是它的目的。

您能否向我推荐一种在 Microsoft 世界中公开我们的服务层的方法。

【问题讨论】:

    标签: c# .net wcf appfabric


    【解决方案1】:

    WCF 似乎是去这里的方式。尽管 WCF 一开始(在我看来)是一头野兽,但多年来它已被驯服,因为它具有更好的 HTTP 和 JSON 支持以及更少的自定义配置(尽管仍然允许您基本上修改服务的每个小方面)。

    将您当前的服务层公开为 REST 服务是一件轻而易举的事,让您的客户/您自己可以在任何支持 HTTP 的设备上轻松使用它。

    见:http://codebetter.com/glennblock/2010/11/01/wcf-web-apis-http-your-way/

    【讨论】:

    • 听说由于标准 WCF 过于庞大,微软不得不提出 WCF Web API (wcf.codeplex.com)。但它仍然是预览版。如果我们想在 7 月发布,使用 Web API 是否是个好主意?
    • 我很难回答你的问题。我玩了一点 Web API,我已经喜欢它了,但我不能告诉你很多关于它的稳定性等。首先,我提供链接的目的只是为了向你展示 WCF 如何也可以充当轻量级服务层,同时仍包含其全部功能。我当然推荐使用 WCF。现在是否选择 Web API,如果您正在考虑,那么我建议在此站点上提出一个新问题
    • 哦,我看到了您对标准 WCF 体积庞大的其他评论。好消息!使用 .NET 4.0,您可以在 WCF 中获得开箱即用的默认配置,体积仍然存在,但我认为使用默认配置和所有资源,您将能够生存
    【解决方案2】:

    模型不是服务。模型是保存数据的 POCO。

    您可以通过 WCF 服务公开您的服务,并让您的 ASP.NET MVC 应用使用它。如果您始终确定服务将在与客户端应用程序相同的机器上运行,则可以使用命名管道进行传输 - 与优势相比,WCF 的开销是最小的。

    【讨论】:

    • 感谢您的回复。那么,能够托管托管在多个盒子上的服务层以实现可扩展性是一项非常重要的要求。所以命名管道不是一种选择。我听说微软有一个缩小版的 wcf 测试版,仅适用于 Web 和 REST。你知道微软有这样的产品吗?
    • 听说由于标准 WCF 过于庞大,微软不得不提出 WCF Web API (wcf.codeplex.com)。但它仍然是预览版。如果我们想在 7 月发布,使用 Web API 是否是个好主意?
    • 显然它仍处于测试阶段,因此对于 7 月的版本来说,使用它似乎是不谨慎的。不过,您不需要粉饰 WCF。这是一个强大的平台,如果你坚持基础,4.0版本很容易使用。如果您没有数据流或数据加密等特殊需求,则只需几分钟即可创建 WCF 服务。如果你不需要做批量插入等,你也可以使用 WCF 数据服务。这是实体框架模型之上的 WCF 层,然后使用 OData(REST 和 AtomPub 的组合)公开该模型。 msdn.microsoft.com/en-us/data/bb931106
    【解决方案3】:

    WCF 似乎是微软朝着这个方向前进的方向,而且是有充分理由的。 WCF 服务是这里的最佳选择,因为您提到了第三方开发支持。因为这些 Web 服务是由 WSDL 定义的,所以它们是跨平台的,可以被非 .NET 应用程序使用。

    它完美地分离了您的服务层以供任何组件使用。

    【讨论】:

      猜你喜欢
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2015-09-15
      • 2011-07-21
      • 2019-05-18
      • 1970-01-01
      相关资源
      最近更新 更多