我已将REST服务迁移到Azure网站,但它一直返回400.0 Bad Request
错误(错误代码为零)。
该服务在本地运行,并且在Web角色中运行时运行良好。进入网站后,它开始返回400.0错误。
我的web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
</system.webServer>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" />
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
我已经在我的班级中设置了ASP.NET兼容性:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class BookingService { ... }
和Global.asax.cs中定义的正确路由:
private void Application_Start (object sender, EventArgs e) {
RouteTable.Routes.Add(new ServiceRoute("booking/service", new WebServiceHostFactory(), typeof(BookingService)));
}
现在,当我尝试在本地访问REST API时,它可以正常工作:
http://localhost/booking/service/help
但是,将Web服务上载到Azure网站并执行以下操作后:
http://xxx.azurewebsites.net/booking/service/help
它返回400.0错误请求。详细的错误日志显示:
Request: ManagedPipelineHandler
Notification: ExecuteRequestHandler
Handler: System.ServiceModel.Activation.AspNetRouteServiceHttpHandler
Error code: 0x00000000
我完全迷失了。谷歌搜索网络没有产生任何帮助。我尝试将以下内容放入web.config:
<handlers>
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="Foo.RoutingHandler" />
</handlers>
并通过扩展UrlRoutingHandler
和定义VerifyAndProcessRequest
来定义处理程序,但它仍然不起作用。
答案 0 :(得分:0)
最后在逐位剥离服务后发现错误。
发生的事情是:
RouteTable.Routes.Add
添加了一个创建类BookingService
对象作为处理程序BookingService
有一个 static 属性,已初始化BookingService
类时,该类的静态初始化程序首先运行并失败总之,如果您在处理程序中看到路由请求失败,则可能是由无法加载的类代码引起的(由于静态初始化程序失败或其他原因)。