WebService服务需要通过注册路由进行转发到自身的asmx页面问题

背景要求
三方接口自定义了url路径,但是原先代码是通过webservice进行开发的asmx页面。 前面已经有人写好了代码,但是本地部署死活无法通过注册的路由调用!

点击查看代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.Routing;
using System.Timers;
using System.Timers;
using KingT.Common.Base;
namespace KingT.Reservation.Reg.Service.Trans
{
 public class Global : System.Web.HttpApplication
 {
 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("XXXX", new Route("service", new WebServiceRouteHandler("AppointmentRegisterWebService_XXX.asmx")));
 routes.Add("XXXXXX", new Route("doReqToHis", new WebFormRouteHandler("~/AppointmentRegisterWebAPI_XXX.ashx")));
 routes.Add("XXX", new Route("yhhis/service/getway", new WebServiceRouteHandler("~/XXXXAppService.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);
 }
 }
 }
}

历经一天多的研究,也询问了一些有经验的人都没有解决。
最终连到一家部署好了的医院进行测试才发现是需要如下设置:

  1. 由于配置文件里面如下设置了:
点击查看代码
<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服务里面的应用池为如下图所示:

  1. Web.config里面下面需要配置一下:
点击查看代码
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

记录下避免下次还会出现这样的情况能够有方向查找原因。

作者:记忆之点滴原文地址:https://www.cnblogs.com/xiaoyongui/p/18726287

%s 个评论

要回复文章请先登录或注册