Asp.Net WebAPI路由在Azure计算模拟器上失败

时间:2013-05-17 20:58:45

标签: azure asp.net-web-api azure-compute-emulator

上下文

我有两个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>

0 个答案:

没有答案