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);
}
}
}
}
历经一天多的研究,也询问了一些有经验的人都没有解决。
最终连到一家部署好了的医院进行测试才发现是需要如下设置:
- 由于配置文件里面如下设置了:
点击查看代码
<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" />

记录下避免下次还会出现这样的情况能够有方向查找原因。
作者:记忆之点滴
出处:CSDN-记忆之点滴
本文版权全归作者与博客园共有,欢迎转载,但未经作者同意必须保留此段声明,并且在文章页面明显处给出原文链接,否则保留追究其法律责任的权利。
(注:博文我一般会在CSDN首发!)

浙公网安备 33010602011771号