我有一个运行在Windows Server 2008 R2(数据中心版)上的IIS 7上的Web应用程序,并使用Visual Studio 2010构build。当我将网站项目部署到本地IIS服务器或托pipe服务的VPS上托pipe的生产IIS服务器时,API控制器可以通过/api/notifications/来访问,通过网页的AJAX调用完成。 问题是,在Amazon EC2实例上的相同设置上,没有一个API控制器可以工作,它们都会导致404找不到响应。 我检查了相同版本的.NET框架被安装在任何地方,IIS运行相同的处理程序映射,模块,ISAPI筛选器,请求筛选和ASP设置都是相同的。 Ran在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”文件夹和其他一切工作,所以我也尝试部署到一个虚拟目录通过创build一个应用程序和访问/Test/api/notifications/仍然在404结果(虽然我可以访问/Test/其余部分)。
我试图通过这个post重新注册框架: http : //www.aheil.de/2012/11/05/fixing-asp-net-mvc-4-web-api-404/
我确保在IISconfiguration中选中“允许未列出的文件扩展名”。
任何想法,为什么这不是在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版本而构build的,所以Web API控制器不会在EC2服务器上部署时初始化。
解决scheme:确保EC2服务器上的框架程序集与开发机器上的相同:
在这个MSDN线程中也有很多有用的信息