Windows-Server-2008-R2

Amazon EC2 實例上沒有 Web API 控制器

  • January 31, 2014

我有一個在 Windows Server 2008 R2(數據中心版)上的 IIS 7 上執行並使用 Visual Studio 2010 建構的 Web 應用程序。當我將網站項目部署到本地 IIS 伺服器或託管在託管服務的 VPS 上的生產 IIS 伺服器時,API可以通過 訪問控制器/api/notifications/,這是通過來自網頁的 AJAX 呼叫完成的。問題是,在 Amazon EC2 實例上的相同設置上,所有 API 控制器都不起作用,它們都會導致 404 not found 響應。我檢查了是否到處都安裝了相同版本的 .NET 框架,IIS 執行相同的處理程序映射、模組、ISAPI 過濾器、請求過濾和 ASP 設置都是相同的。在 EC2 實例上執行請求跟踪失敗,並且沒有出現與 asp 相關的錯誤。一切都是最新的。我嘗試添加:

<modules runAllManagedModulesForAllRequests="true" />

並嘗試添加:

<handlers>
   <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" 
        type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" 
        requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

到 web.config 文件中的適當位置,仍然沒有 api 控制器。通常,該網站被部署到“wwwroot”文件夾,其他一切正常,所以我還嘗試通過創建應用程序部署到虛擬目錄並訪問/Test/api/notifications/仍然會導致 404(雖然我可以訪問網站的其餘部分/Test/)。

我嘗試通過這篇文章重新註冊框架:http ://www.aheil.de/2012/11/05/fixing-asp-net-mvc-4-web-api-404/

我確保在 IIS 配置中選中了“允許未列出的文件副檔名”。

任何想法為什麼這不適用於 EC2 實例?

問題是 .NET Framework 4.5 安裝在所有開發機器上,但沒有安裝在 Amazon EC2 Windows Server 2008 R2 伺服器上。安裝 .NET 4.5 顯然也更新了舊的 4.0 程序集(特別是,我懷疑 System.Net.Http 和 System.Web.Http),並且因為 webapp 是針對這些 4.0 程序集的 4.5 版本建構的,所以 Web API 控制器不會部署在 EC2 伺服器上時進行初始化。

解決方案:確保 EC2 伺服器上的框架程序集與開發機器上的框架程序集相同:

  1. 在 EC2 伺服器上安裝 .NET 4.5
  2. 在開發機器上解除安裝 .NET 4.5。

這個 MSDN 執行緒中還有很多有用的資訊

引用自:https://serverfault.com/questions/564771