语境
我有两个 asp.net mvc 4 应用程序,一个是从 Visual Studio 2010 Internet App 项目模板派生的标准 CRUD 样式应用程序,第二个来自 Web API 模板,旨在用作 REST 服务。我的意图是在同一个 Azure Web 角色实例上运行这两个应用程序。
问题
当我尝试使用“在浏览器中查看”或通过使应用程序成为启动项目并使用调试->启动新实例来访问 Web api 时,我能够发出 GET 并检索带有数据的响应。当我尝试在托管在 Azure 计算模拟器中的本地计算机上运行这些应用程序时,没有任何 WebAPI 路由解析到相应的控制器,并且我总是得到 404 响应。只有 WebAPI 路由表现出这种行为——它们似乎完全被忽略了,就好像我根本没有注册它们一样。
请求的发出方式无关紧要 - 我可以从浏览器发出它们,或者我可以从(例如)另一个 Web 应用程序中的服务器端 RESTSharp 客户端发出它们。在所有情况下,当此应用程序托管在计算模拟器上时,注册的 WebAPI 路由都不会解析到相应的控制器。
问题
我可能在我的云项目中错误配置了什么,以至于只有在本地 Azure 计算模拟器上托管时才会忽略 WebAPI 路由?
我试过的
我已经查看了这些问题,其中没有包含任何改变这种行为的信息:
我尝试将这两个应用程序分成不同的 Web 角色,但这没有效果。
我尝试使用开箱即用的 WebAPI 项目从头开始创建云项目,这些项目似乎都可以正常工作,因此它似乎不是模拟器缺陷。我在当前的 VS2010SP1 Cloud 项目配置中显然搞砸了一些东西(我正在使用用于 Visual Studio 的 Azure v2.0 SDK 工具)。
代码示例
FWIW,这是我当前与托管这两个应用程序的 Web 角色相关的 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>