views:

9161

answers:

8

Hello,

Does adding a Web Service to my ASP.NET MVC project break the whole concept of MVC?

That Web Service (WCF) depends on the Model layer from my MVC project to communicate with the back-end (so it looks to me like it needs to be part of the MVC solution).

Should I add this to the Controller or Model layer?

+7  A: 

Is there a specific reason you need to add web services to your MVC application? Unless there is a specific reason you should use your controllers in a RESTful manner just as you would a RESTful web service.

Check out this post from Rob Connery for more information: ASP.Net MVC: Using RESTful architecture

SaaS Developer
+3  A: 

I need the web service because it will be used by two Silverlight applications.

I rather use a web service than a controller, because with a web service I can do "Add Service Reference" in my Silverlight applications, but using controllers, I will have to manually connect and call the actions of the controller (using WebClient or whatever), which is slightly more code than a web service.

ANaimi
A: 

I have added web services to my application and it works well. I don't believe it violates MVC because it is an alternative interface to your model. MVC is not appropriate for web services because web services don't have a view.

liammclennan
Web services can be created using MVC just as well as websites or RSS feeds. Actually, this is one of the strengths of the MVC concept - the same controller action can pass it's data to any kind of view - the web service outputs stuff so it *is* a view. :)
hangy
+8  A: 

It sounds like you should split out your model into its own assembly and reference it from your MVC-application and WCF-application.

  • YourApp.Data -- Shared model and data access maybe
  • YourApp.Web -- If you want to share more across your web-apps
  • YourApp.Web.Mvc
  • YourApp.Web.WebService

If you want to do WebServices MVC-style maybe you should use MVC to build your own REST-application.

Seb Nilsson
Wouldn't you be duplicating controller logic in the service, then? And saving nothing by using a model, since you end up writing controller code twice.
Rob Elsner
+1  A: 

I don't think separating the model into it's own assembly has any bearing on whether or not you're using MVC, you still have a model. Where it is is irrelevant surely?

+2  A: 

Separating the Model into it's own project is not breaking the "MVC" pattern. First off, it is just that -- a pattern. The intention of the MVC pattern is to clearly delineate between your data, the data handlers, and the presenters and the way you interface between them. The best way to do it is how Seb suggested:

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

Something that might help you out is the MVC Storefront that Rob Conery put together. Go watch the video's here:

MVC Storefront Video Series

And if you want to look at the actual code in your browser to quickly see how he did it, go here: MVC Storefront Codeplex Code Browser

MunkiPhD
+1  A: 

Is there a way to support multiple protocols with a single MVC Controller? Protocol 1 = XML over HTTP and Protocol 2 = WebServices (WSDL). Throwing mud against the wall, perhaps a web services extends the base controller class OR the web service class also extends controller?

James Wilson
+1  A: 

I've had a go at doing this.

See my result at my blog

ps: I don't believe that this will break the MVC concept so long as you think that a web service is the model of a repository because all a web service does is returning a XML dump.

Zac
I've updated the URL so it won't expire
Zac