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號