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>

web.config里面的配置

因此需要设置下IIS服务里面的应用池为如下图所示:
IIS服务里面应用池

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

访问图片

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

posted @ 2025-02-20 12:23  记忆之点滴  阅读(84)  评论(0)    收藏  举报