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