背景要求
三方接口自定义了url路径,但是原先代码是通过webservice进行开发的asmx页面。
前面已经有人写好了代码,但是本地部署死活无法通过注册的路由调用!
`protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}/// <summary>/// 路由注册 页面使用WebFormRouteHandler,服务用WebServiceRouteHandler/// </summary>/// <param name="routes"></param>public static void RegisterRoutes(RouteCollection routes){routes.Add("XXXX1", new Route("service", new WebServiceRouteHandler("AppointmentRegisterWebService_XXX1.asmx")));routes.Add("XXX", new Route("doReqToHis", new WebFormRouteHandler("~/AppointmentRegisterWebAPI_XXXXX.ashx")));routes.Add("XXXXXX", new Route("yhhis/service/getway", new WebServiceRouteHandler("~/XXXXXAppService.asmx")));}protected void Application_Error(object sender, EventArgs e){Exception ex = Server.GetLastError().GetBaseException();// 如果是 HttpException 类型的异常,并且状态码为 404 或 500,就将异常记录到日志中if (ex is HttpException && (ex as HttpException).GetHttpCode() == 404 || (ex as HttpException).GetHttpCode() == 500){// 记录异常信息到日志中LogFile log = new LogFile("Global");log.WriteLog(ex.Message + "-" + ex.StackTrace);}}`
历经一天多的研究,也询问了一些有经验的人都没有解决。
最终连到一家部署好了的医院进行测试才发现是需要如下设置:
- 由于配置文件里面如下设置了:
<system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules> <remove name="ScriptModule" /> <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> </modules> <handlers accessPolicy="Read, Execute, Script"> <remove name="WebServiceHandlerFactory-Integrated" /> <remove name="ScriptHandlerFactory" /> <remove name="ScriptHandlerFactoryAppServices" /> <remove name="ScriptResource" /> <add name="all" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="None" preCondition="classicMode,runtimeVersionv2.0,bitness64" /> <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add name="ScriptResource" path="ScriptResource.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" /> </handlers> <directoryBrowse enabled="false" /> </system.webServer>
因此需要设置下IIS服务里面的应用池为如下图所示:
- Web.config里面
下面需要配置一下:
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
记录下避免下次还会出现这样的情况能够有方向查找原因。