2

语境

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

0 回答 0