2008-09-23 17 views
48

¿Agregar un servicio web a mi proyecto ASP.NET MVC rompe todo el concepto de MVC?ASP.NET MVC y servicios web

Ese servicio web (WCF) depende de la capa de modelo de mi proyecto MVC para comunicarse con el back-end (por lo que me parece que necesita ser parte de la solución MVC).

¿Debo agregar esto a la capa de Controlador o Modelo?

Respuesta

27

Parece que debe dividir su modelo en su propio conjunto y hacer referencia a él desde su aplicación MVC y aplicación WCF.

  • YourApp.Data - modelo compartido y el acceso a los datos tal vez
  • YourApp.Web - Si desea compartir más a través de sus aplicaciones web
  • YourApp.Web.Mvc
  • YourApp.Web .WebService

Si quiere hacer WebServices MVC-style tal vez debería usar MVC para construir su propia aplicación REST.

+0

¿No estaría duplicando la lógica del controlador en el servicio, entonces? Y no ahorre nada usando un modelo, ya que termina escribiendo código de controlador dos veces. –

+0

@Rob, no, porque el código del controlador para la visualización de páginas web debería tratar con vistas y validación de modelos, etc. El controlador apacible api sería idealmente escupir json y formatear datos. – Chev

19

¿Hay algún motivo específico por el que necesite agregar servicios web a su aplicación MVC? A menos que exista una razón específica, debe usar sus controladores de manera RESTful como lo haría con un servicio web RESTful.

Salida este post de Rob Connery para más información: ASP.Net MVC: Using RESTful architecture

+0

Esto es bastante viejo, pero es posible que tengas una respuesta para una pregunta que tengo. Tengo la impresión de que para cargar dinámicamente, digamos, una lista desplegable con valores que cambian cuando cambia otro menú desplegable, necesitaría un servicio web. Así es como lo haría en webForms. ¿Cómo se hace esto en MVC? – Erix

+2

El enlace está roto y no pude encontrar un enlace actualizado. El contenido está disponible en Wayback Machine: http://web.archive.org/web/20130119131317/http://wekeroad.com/2007/12/06/aspnet-mvc-using-restful-architecture –

0

he añadido los servicios de Internet para mi aplicación y funciona bien. No creo que viole MVC porque es una interfaz alternativa a su modelo. MVC no es apropiado para servicios web porque los servicios web no tienen una vista.

+4

Los servicios web pueden crearse utilizando MVC tan bien como sitios web o fuentes RSS. En realidad, este es uno de los puntos fuertes del concepto MVC: la misma acción del controlador puede pasar sus datos a cualquier tipo de vista: el servicio web genera cosas por lo que * es * una vista. :) – hangy

2

No creo que separar el modelo en su propio ensamble tenga alguna relación con el uso o no de MVC, todavía tiene un modelo. ¿Dónde está es irrelevante?

11

Separar el modelo en su propio proyecto no está rompiendo el patrón "MVC". En primer lugar, es solo eso, un patrón. La intención del patrón MVC es delinear claramente entre sus datos, los manejadores de datos y los presentadores y la forma en que interactúa entre ellos. La mejor manera de hacerlo es como sugirió Seb:

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

Algo que podría ayudarle a cabo es la MVC Storefront que Rob Conery armó. Ir a ver el video aquí:

MVC Storefront Video Series

Y si desea buscar en el código real en su navegador para ver rápidamente cómo lo hizo, entra aquí: MVC Storefront Codeplex Code Browser

1

He tenido una ir a hacer esto.

Ver mi resultado en my blog

PS: No creo que esto va a romper el concepto MVC siempre y cuando se considera que un servicio web es el modelo de un repositorio porque todo un servicio web no está regresando un volcado de XML.

+0

He actualizado la URL para que no caduque – Zac

+0

lol, "no caducará" – Chev

0

Considere los servicios web y las bases de datos como uno solo en el mismo. Bajo esta analogía, creo que tiene sentido ubicar las interacciones de su servicio web donde coloca su lógica de base de datos.

Cuestiones relacionadas