ASP.NET MVC和Web Services

48

将Web服务添加到ASP.NET MVC项目中是否破坏了MVC的整个概念?

该Web服务(WCF)依赖于我的MVC项目的Model层与后端进行通信(所以在我看来,它似乎需要成为MVC解决方案的一部分)。

我应该将其添加到Controller还是Model层?

7个回答

27

看起来你应该把你的模型分离成它自己的程序集,并从你的MVC应用程序和WCF应用程序中引用它。

  • YourApp.Data -- 共享模型和数据访问
  • YourApp.Web -- 如果你想在Web应用程序之间共享更多内容
  • YourApp.Web.Mvc
  • YourApp.Web.WebService

如果你想要使用MVC风格构建Web Services,也许你应该使用MVC来构建你自己的REST应用程序。


你不觉得这样会在服务中重复控制器逻辑吗?而且使用模型并不能节省任何东西,因为最终你还是要写两次控制器代码。 - Rob Elsner
@Rob,不是的,因为网页查看的控制器代码应该处理视图和验证模型等内容。Restful API控制器最好能够输出JSON并格式化数据。 - Chev

19

你需要给你的MVC应用程序添加Web服务有特殊的原因吗?除非有特殊原因,你应该像使用RESTful Web服务一样以RESTful方式使用你的控制器。

请查看Rob Connery的这篇文章以获取更多信息:ASP.Net MVC:使用RESTful架构


这可能有点老了,但你可能有我要问的问题的答案。我的印象是,为了动态加载下拉列表并在另一个下拉列表更改时更改值,我需要一个Web服务。这是我在WebForms中的做法。在MVC中如何实现呢? - Erix
2
链接已经失效,我无法找到更新的链接。该内容可以在Wayback Machine上找到:http://web.archive.org/web/20130119131317/http://wekeroad.com/2007/12/06/aspnet-mvc-using-restful-architecture - Chris Nielsen

11

将模型分离到自己的项目中并不会破坏"MVC"模式。首先,这只是一种模式。MVC模式的意图是清晰地区分数据、数据处理程序和演示者以及它们之间的接口方式。最好的方法是像Seb建议的那样:

  • YourApp.Data
  • YourApp.Web.Mvc
  • YourApp.Web.WebService

可能对您有所帮助的是,Rob Conery制作的MVC商店前端。在这里观看视频:

MVC商店前端视频系列

如果您想在浏览器中查看实际代码以快速了解他是如何完成的,请访问此处: MVC商店前端Codeplex Code Browser


2

我认为将模型分离成自己的程序集与是否使用MVC没有任何关系,因为你仍然有一个模型,它在哪里并不重要。


1

我已经尝试过这个。

请在我的博客中查看我的结果

附言:只要您认为Web服务是存储库的模型,因为Web服务所做的就是返回XML转储,所以我不认为这会破坏MVC概念。


0
将Web服务和数据库视为同一内容。根据这个类比,我认为在处理数据库逻辑的地方也应该处理您的Web服务交互。

0
我已经将Web服务添加到我的应用程序中,它工作得很好。我不相信它违反了MVC模式,因为它是与您的模型交互的替代界面。MVC模式不适用于Web服务,因为Web服务没有视图。

4
使用MVC模式创建Web服务就像创建网站或RSS订阅一样容易。实际上,这也是MVC概念的优势之一 - 相同的控制器操作可以将其数据传递给任何类型的视图 - Web服务会输出内容,因此它也算是一种视图。 :) - hangy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接