【问题标题】:Building service layer - which way to go?构建服务层——走哪条路?
【发布时间】:2011-05-02 22:33:17
【问题描述】:

我有一个当前应用程序,其中客户端 ClickOnce 应用程序访问 ASMX Web 服务以获取各种信息。它工作正常,但有点慢。部分问题在于它返回大对象,当分解为 SOAP 时,会将大对象变成一团糟的 XML 标记,从而大大增加了有效负载的大小。

无论如何,为了解决这个问题,我正在考虑使用我听说过很多但从未真正用于“Hello World”应用程序之外的技术,用更轻量级的技术重写此设置。

所以我正在考虑做一个返回 JSON 对象的 REST api。鉴于 JSON 是一种更紧凑的格式,这应该可以减轻消息问题的大小。而且,除非有什么我不知道的,否则解析它并不比 SOAP XML 更密集。

问题:

  1. 我的假设是否合理?
  2. 我应该使用哪些技术来实现 REST 和 JSON?我听说过WCF Web API,但它看起来还不完整。我有哪些选择?
  3. 在开始之前,我应该了解 WCF、REST 和 JSON 的一些讨厌的地方吗?

【问题讨论】:

  • 我认为你的假设是好的。您基本上构建的是“适配器”或代理。

标签: c# json rest architecture .net-3.5


【解决方案1】:

REST 是一种利用 HTTP 的架构风格,因此我建议为服务使用 HTTP 侦听器。

JSON 是 JavaScript 对象表示法,因此您需要在服务器端使用 JSON 解析器。您可以在客户端流式传输 JSON 以获取响应; MIME 类型是application/json

我不知道 WCF 中有什么令人讨厌的惊喜,但我没有看到任何关于 HTTP 的惊喜。

【讨论】:

    【解决方案2】:

    序列化过程可以使用DataContractJsonSerializer

    我不会使用 WCF 来创建 JSON restful web 服务。恕我直言,如果您改用 ASP.NET MVC3,您可以获得更好的结构。更容易遵循代码并且更容易创建 RESTful 路由。

    要返回 JSON,您只需像这样返回您的视图模型(使用 http://mydomain.com/user/view/10 获取它):

    public ActionResult View(int id) 
    {
        var user = _repository.Get(id);
        var viewModel = AutoMapper.Map<UserViewModel, User>(user);
        return Json(viewModel);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 1970-01-01
      • 2020-07-27
      • 2011-04-16
      • 2011-01-25
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多