gpt4 book ai didi

c# - ASP .Net MapRequestHandler 慢

转载 作者:行者123 更新时间:2023-12-04 11:46:44 24 4
gpt4 key购买 nike

我们推出了一个经典的 ASP.Net WebService 应用程序,流量很大。尽管我们的数据库运行良好(<10 ms 响应时间),但 WebServer 上花费的大部分时间都在 MapRequestHandler 阶段。

New Relic Request Breakdown

enter image description here

这个问题似乎在 ASP .Net 堆栈中很深,并且没有任何可用的网络信息,我对如何改进它一无所知。

我们对请求/响应使用 XML 有效负载(如果这有助于提供解决方案)。

最佳答案

请发布您的处理程序代码和您的配置文件。

MapRequestHandler - The MapRequestHandler event is used by the ASP.NET infrastructure to determinerequest handler for the current request based on the file-name extension of the requested resource. MapRequestHandler is an event that the handlers need to implement, I suspect its stuck at some delegate that maps some custom file.


我怀疑它的 1 ) 没有找到,循环查找那个自定义文件处理程序,你可能没有 2 ) 使用 async handler你要追赶各种 delegate使用这个 event并设置断点
确保它们是 Async & Registered例如
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />    
<add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler" />
<add verb="*" path="*.asmx" type="System.Web.Services.Protocols.WebServiceHandlerFactory" />
然后在handlers下验证
<httpHandlers>

<add verb="*" path="*.MyCustomaspx" type="MyCustomHTTPhandler"/>

</httpHandlers>
在您的实现中使用 async版本基处理程序
 // dervie from Async HttpTaskAsyncHandler 
public class MyCustomHTTPhandler: HttpTaskAsyncHandler {
public override Task ProcessRequestAsync(HttpContext context)
{
//throw new NotImplementedException();
//blah blah.. some code
}
}

不得已,不推荐 - 来自 SO here , 如果您的处理程序/页面没有修改 session 变量,您可以跳过 session 锁。
<% @Page EnableSessionState="ReadOnly" %>

如果您的页面不读取任何 session 变量,您可以为该页面选择完全退出此锁定。
<% @Page EnableSessionState="False" %>

如果您的页面都没有使用 session 变量,只需在 web.config 中关闭 session 状态。
<sessionState mode="Off" />

基于此,如果您只想根据您的特定页面/处理程序自定义 session 状态
using System;
using System.Web;

public class CustomSessionStateModule : IHttpModule
{
public void Dispose(){ //.. }

public void Init(HttpApplication context){
context.BeginRequest += new EventHandler(context_BeginRequest);
}

void context_BeginRequest(object sender, EventArgs e){
HttpContext currentContext = (sender as HttpApplication).Context;
// here you can filter and turn off/on the session state
if (!currentContext.Request.Url.ToString().Contains("My Custom Handler or Page Value")){
// for e.g. change it to read only
currentContext.SetSessionStateBehavior(
System.Web.SessionState.SessionStateBehavior.ReadOnly);
}

else {
//set it back to default
currentContext.SetSessionStateBehavior(
System.Web.SessionState.SessionStateBehavior.Default);
}
}
}

关于c# - ASP .Net MapRequestHandler 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44988096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com