asp.net mvc作为一个宁静的服务和一个应用程序?

时间:2009-04-25 06:52:18

标签: asp.net asp.net-mvc architecture rest

目前我正在开发asp.net mvc中的小应用程序。它是一种某种本地化工具。我们的客户登录我们的应用程序,他们可以翻译他们使用的应用程序中显示的条款。它是这样的:

  1. 登录本地化网站
  2. 在“目录”应用程序
  3. 中查找并翻译某些术语,例如标题的标题
  4. 启动该应用程序(例如,来自2的“目录”应用程序)和通过Web服务,他们使用已翻译的术语更新本地数据库数据库
  5. 这是我们的旧解决方案,并且工作正常。 但是现在,我正在重构asp.net mvc中的翻译工具应用程序,我想,为什么我们在mvc和Web服务中有单独的逻辑(加倍)?为什么我们不能只使用mvc作为Web服务...这样我只有一个逻辑(获取元素和更新),我们不需要创建wcf Web服务或其他东西。最重要的是,我没有网格桌面应用程序依赖于我有这个逻辑的dll。

    现在问题。我可以从mvc中的控制器获得,除了视图和JsonResults ...我可以直接获得我的对象的集合吗?

    或者更简单的问题,我如何使用asp.net mvc作为Web服务。你有什么经历?

    欢呼声 马可

2 个答案:

答案 0 :(得分:2)

这实际上取决于您的需求。您当然可以使用ASP.NET MVC应用程序作为数据服务,但听起来您应该将共享代码梳理到公共库中并在两个应用程序中引用该库。 Web服务项目提供的一些内容纯粹作为控制器操作会更加困难。 (de / serialization,wsdl等......)

答案 1 :(得分:1)

这实际上取决于您的网络服务将会消耗什么。

例如:jQuery很好地使用了JsonResults,因为我可以从一个动作返回复杂的对象(带有集合,数组,嵌套对象等),并让jQuery将它反序列化回javascript对象,以便在客户端浏览器中使用。当然,您通过序列化过程会失去类型安全性,但在大多数基于REST / SOAP的Web服务中这是非常期待的。如果您确实需要消费应用程序的类型安全性,请坚持使用WCF(或类似)。

我只是创建一个标志来返回Json的动作。我注意到有几个网站就是这样做的。说你有这个动作:

    public ActionResult GetPeople()
    {
        IList<Person> result = svc.GetPeople();

        return View(result);
    }

..此动作的结果通常会呈现在某个视图中。这很好,但如果您想将该操作用作Web服务,您只需将其更改为:

    public ActionResult GetPeople(string ajax)
    {
        IList<Person> result = svc.GetPeople();

        if (Convert.ToBoolean(ajax))
            return Json(result);
        else
            return View(result);
    }

..所以,如果您的消费应用程序不介意序列化的Json,那么而不是像http://domain.com/controller/GetPeople那样调用GET请求(因为浏览器会获取View),你只需添加ajax标志就像这样http://domain.com/controller/GetPeople?ajax=true返回Json。更合适的标志可能是'json'而不是'ajax' - 'ajax'很常见,因为此方法用于支持向下浏览器执行可选择使用ajax调用的操作。

我一直在考虑将这个添加到我的mvc应用程序中一段时间​​,但我不喜欢用这个标志修改每个动作的想法并添加更多if语句。我的想法是创建一个自定义属性来装饰你想要这个功能的动作,并且属性动态地添加额外标志并有条件地将模型数据作为Json而不是最初指定的返回。试一试。