Как разместить службу WCF REST и службу данных WCF в одном файле global.asax - PullRequest
3 голосов
/ 24 июня 2011

У меня есть веб-служба WCF REST, которая размещается через маршрут службы в global.asax, который выглядит следующим образом;

protected override void RegisterRoutes(System.Web.Routing.RouteCollection routeTable)
    {
        routeTable.Add(new ServiceRoute("", new WebServiceHostFactory(),
                       typeof(UserService)));
    }

Мне интересно, возможно ли также разместить другой веб-сервис(которая является Службой данных WCF) в том же приложении.

protected override void RegisterRoutes(System.Web.Routing.RouteCollection routeTable)
    {
        routeTable.Add(new ServiceRoute("", new WebServiceHostFactory(),
                       typeof(UserService)));
        routeTable.Add(new ServiceRoute("OData", new DataServiceHostFactory(),
                       typeof(UserDataService)));
    }

Попытка перейти в моем браузере к http://localhost:port/ вызывает стандартную услугу REST при переходе к http://localhost:port/OData выводит страницу «конечная точка не найдена».

Причина этого в том, что у меня есть устаревший код в службе REST, который мне нужно хранить, но я также хочу предоставить некоторые чистые данные через службу данных.

1 Ответ

4 голосов
/ 21 июля 2011

Оказывается, это было очень просто, и я полностью упустил очевидное.

Появляется, когда вы размещаете несколько сервисных маршрутов, вы не можете иметь префикс по умолчанию / пустой маршрут ни на одном из маршрутов, как вы можете использовать один маршрут. Обратите внимание, что это было в моем вопросе выше для маршрута UserService.

Таким образом, предоставление префикса маршрута для обоих сервисных маршрутов позволяет размещать оба сервиса в одном и том же global.asax.

Предоставление кода для полноты ...

protected override void RegisterRoutes(System.Web.Routing.RouteCollection routeTable)
{
    routeTable.Add(new ServiceRoute("Rest", new WebServiceHostFactory(),
                   typeof(UserService)));
    routeTable.Add(new ServiceRoute("OData", new DataServiceHostFactory(),
                   typeof(UserDataService)));
}
...