Контекст
У меня есть два приложения asp.net mvc 4, одно из которых представляет собой стандартное приложение в стиле CRUD, полученное из шаблона проекта интернет-приложения Visual Studio 2010, второе — из шаблона веб-API и предназначено для работы в качестве службы REST. Я намерен запустить оба этих приложения в одном и том же экземпляре веб-роли Azure.
Проблема
Когда я пытаюсь получить доступ к веб-API с помощью «просмотра в браузере» или путем создания приложения StartUp Project и использования Debug-> Start New Instance, я могу выдавать GET и получать ответы с данными. Когда я пытаюсь запустить эти приложения на своем локальном компьютере, размещенном в эмуляторе вычислений Azure, НИ ОДИН из маршрутов WebAPI никогда не разрешается на соответствующий контроллер, и я всегда получаю ответы 404. Такое поведение проявляют только маршруты WebAPI - они полностью игнорируются, как будто я их вообще не регистрировал.
Неважно, как сделан запрос — я могу выдать их из браузера или из (например) клиента RESTSharp на стороне сервера в другом веб-приложении. Во всех случаях, когда это приложение размещается на эмуляторе вычислений, ни один из зарегистрированных маршрутов WebAPI не разрешается в соответствующий контроллер.
Вопрос
Что я мог неправильно настроить в своем облачном проекте, чтобы маршруты WebAPI игнорировались ТОЛЬКО при размещении в локальном эмуляторе вычислений Azure?
Что я пробовал
Я рассмотрел эти вопросы, ни один из которых не содержал никакой информации, которая изменила бы это поведение:
- Запуск WebApi вместе с проектом MVC в Azure
- WebApi развернут в Azure — контроллеры не работают (ошибка 500)
Я попытался разделить два приложения на отдельные веб-роли, но это не дало результата.
Я пытался создавать облачные проекты с нуля с готовыми проектами WebAPI, и все они, кажется, работают без проблем, так что это не похоже на дефект эмулятора. У меня явно что-то не так в моей текущей конфигурации облачного проекта VS2010SP1 (я использую инструменты Azure v2.0 SDK для Visual Studio).
Пример кода
FWIW, вот моя текущая конфигурация ServiceDefinition, относящаяся к веб-роли, в которой размещены эти два приложения:
<WebRole name="DualSite" vmsize="Small">
<Sites>
<Site name="CRUDAppSite">
<VirtualApplication name="CRUDApp" physicalDirectory="..\..\..\source\CRUDApp" />
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
</Bindings>
</Site>
<Site name="RestAppSite" physicalDirectory="..\..\..\source\RestApp">
<VirtualApplication name="RestApp" physicalDirectory="..\..\..\source\RestApp" />
<Bindings>
<Binding name="Endpoint2" endpointName="Endpoint2" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="9090" />
<InputEndpoint name="Endpoint2" protocol="https" port="7080" certificate="RestAppSSLCert" />
</Endpoints>
<Imports>
<Import moduleName="Diagnostics" />
<Import moduleName="RemoteAccess" />
</Imports>
<Certificates>
<Certificate name="RestAppSSLCert" storeLocation="LocalMachine" storeName="My" />
</Certificates>
</WebRole>