Веб-сервисы в ASP .NET MVC2 - PullRequest
       5

Веб-сервисы в ASP .NET MVC2

1 голос
/ 30 ноября 2010

Я использую ASP .NET MVC2 для создания веб-сайта, управляемого данными.Частью запроса функции также является создание веб-сервисов многократного использования для предоставления некоторых данных и бизнес-логики, с помощью которых конечные пользователи могут создавать гибридные приложения.В нашей организации и за ее пределами будет использоваться значительное количество пользователей.

До сих пор я создал приложение, которое связывается с базой данных (используя структуру сущностей ORM), обрабатывает и отображает данные (используя шаблон модели представления представления модели).Эта часть была простой для веб-сайта.

Что касается части веб-сервисов, я изучаю использование WCF для создания веб-сервисов.Должен ли я создавать службы данных WCF как отдельный проект.Я предполагаю, что я смогу повторно использовать некоторый код в контроллере.

В части веб-сайта я должен назвать эти веб-сервисы и использовать их в качестве модели?Любые лучшие практики?

Будучи новичком в asp .net, мы будем благодарны за любые указатели в правильном направлении.

1 Ответ

2 голосов
/ 30 ноября 2010

Вы можете использовать отдельное веб-приложение для размещения веб-сервисов.Это даст вам возможность разместить ваше приложение MVC и службу WCF в отдельных виртуальных каталогах в IIS.После того, как вы написали веб-сервис, вы можете сгенерировать клиентский прокси, а затем в клиентском приложении вы можете использовать репозиторий:

public interface IProductsRepository
{
    IEnumerable<Person> GetProducts();
}

, а затем иметь конкретную реализацию этого репозитория, которая будет извлекать данные из вашего WCF.service:

public class ProductsRepositoryWcf
{
    public IEnumerable<Person> GetProducts()
    {
        using (var client = new YourWebServiceClient())
        {
            // call the web service method
            return client.GetProducts();
        }
    }
}

И, наконец, вставьте этот репозиторий в конструктор вашего контроллера, который может выглядеть следующим образом:

public class HomeController: Controller
{
    private readonly IProductsRepository _repository;
    public HomeController(IProductsRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index()
    {
        var products = _repository.GetProducts();
        // TODO: An intermediary step might be necessary to convert the Product
        // model coming from the web service to a view model which is adapted
        // to the given view
        return View(products);
    }
}

Как вы можете видеть, контроллер полностью отделен, кстати,данные получены.Все, что его волнует, это то, что он уважает данный контракт (интерфейс IProductsRepository).Используя ваш любимый DI-фреймворк, вы можете легко переключать реализацию.

Кстати, если ваш код похож на мой, единственное, что вы должны изменить в своем текущем приложении MVC, - это перенести модели и слои доступа к данным в отдельный сервисный проект WCF, к которому вы бы добавили ссылку на сервис, реализоватьрепозиторий ProductsRepositoryWcf и проинструктируйте вашу инфраструктуру DI использовать эту реализацию вместо ProductsRepositorySql, который теперь будет идти к веб-сервису.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...