Вызвать службы WCF, принадлежащие к области в приложении MVC, на маршруте

У меня есть служба WCF (скажем TestService.svc, сидящая внутри каталога services области в приложении MVC. Эта область объединена в основном приложении. Эта область называется content.

Маршруты были настроены, и область работает нормально. Чтобы получить доступ к действию Index на контроллере Home, я могу сделать либо:

http://my-host/areas/content/index/home

или

http://my-host/content/index/home

Доступ к SVC файлу можно получить только через:

http://my-host/areas/content/services/TestService.svc

URL-адрес должен содержать каталог areas, я не могу получить к нему доступ напрямую через http://my-host/content/services/TestService.svc. Если я попробую, мне дается ошибка 404.

Есть ли способ настроить приложение таким образом, чтобы он направлял запрос SVC через ту же таблицу маршрутов, что и контроллеры? Я не хочу использовать areas для служб.

Ответ 1

Если у вас есть свобода использовать .Net 4.0, вы можете подумать о том, чтобы сделать вашу службу WCF доступной через ServiceRoute, а не через файл .svc.

Это позволит вам избежать наличия файла TestService.svc с кодом кода TestService.svc.cs. В вашем Global.asax.cs у вас будет следующее:

public static void RegisterRoutes(RouteCollection routes, IUnityContainer container)
{
    ... other MVC route mapping ....
    routes.Add(new ServiceRoute("TestService", new ServiceHostFactory(), typeof(LoaEvents)));
}

Затем ваш сервис должен быть доступен через http://my-host/TestService.

Возможно, вы сможете изменить аргумент "TestService" на "/content/services/TestService" или что-то, что лучше работает для ваших нужд.