问题标签 [ihttpasynchandler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4310 浏览

asp.net - 如何使 ASP.NET MVC 从 IRouteHandler.GetHttpHandler() 识别 IHttpAsyncHandler?

在这个问答中,我找到了一种让 ASP.NET MVC 支持异步处理的方法。但是,我不能让它工作。

基本上,这个想法是创建一个新的 IRouteHandler 实现,它只有一个方法GetHttpHandler。GetHttpHandler方法应该返回一个实现而不是 just 因为有 Begin/EndXXXX 模式 API。IHttpAsyncHandlerIHttpHandlerIHttpAsyncHandler

然后,在文件 Global.asax.cs 的 RegisterRoutes 方法中,注册这个类AsyncMvcRouteHandler

我在ProcessRequestBeginProcessRequestEndProcessRequest设置断点。仅执行ProcessRequest。换句话说,即使AsyncMvcHandler实现了IHttpAsyncHandler。ASP.NET MVC 不知道这一点,只是将其作为IHttpHandler实现处理。

如何使 ASP.NET MVC 将AsyncMvcHandler视为IHttpAsyncHandler以便我们可以进行异步页面处理?

0 投票
6 回答
105311 浏览

asp.net - 什么是 ASP.NET 中的 HttpHandler

什么是 ASP.NET 中的 HttpHandler?为什么以及如何使用它?

0 投票
1 回答
763 浏览

asp.net - 如何使用 IHTTPAsyncHandler?

想象一下,我有一些代码要从文件的开头到结尾读取,如下所示:

我希望这是完全异步的。当从 IHTTPAsyncHandler 派生时,这段代码会去哪里,获取每一行内容的代码会去哪里?

0 投票
1 回答
13350 浏览

asp.net - IIS 7.0 503 错误与实现 IHttpAsyncHandler 的通用处理程序 (.ashx)

我在使用实现 IHttpAsyncHandler 的通用处理程序时遇到了一些性能问题。在最简单的情况下,处理程序接收到一个 GET 请求,并在 20 秒后将“< timeout />”写入响应后结束响应。

当用 10000-20000 个同时请求敲击 .ashx 时,它会在恰好 5000 个请求后失败,503 服务器不可用。当切换到同步模式并立即结束请求时,问题就消失了。

我已经修改了许多设置,但我唯一设法实现的是降低发生此错误的请求阈值。

这是我玩弄过的设置的简要说明:

机器配置:

网络配置:

IIS 管理器 > 应用程序池 > 高级设置

虽然我不能确定,如果请求是同步的,这些设置似乎工作得很好,但是当异步时,在服务器开始告诉我离开之前,我似乎无法超过 5000 个请求。如果我把事情设置得更低(不记得上面到底是哪个设置,但我都试过了),那么 503 计数会相应增加,但在严重负载下我永远无法阻止它超过 5000 .

似乎有许多设置分散在可能会影响这一点的无数地方,但 5000 似乎相当固定。我在这里看到 appRequestQueueLimit 不能超过 5000,但找不到有关此的更多信息,并且想知道这是否是错误信息。

IIS 中是否有任何类型的“洪水控制”设置可能将单个主机限制为不超过 5000 个请求?如何让 IIS 处理超过 5000 个并发异步请求?

Edit2:是否有任何可能超出限制的计数器或其他指标,我将如何进一步调查?

编辑:这是负载生成器代码:

0 投票
2 回答
420 浏览

asp.net - IHttpAsyncHandler 内部的同步数据库读取

在 asp.net 上,如果我使用 delegate.BeginInvoke 在 IHttpAsyncHandler 中调用同步数据库查询,它在读取数据库时是否仍会释放 asp.net 工作线程?

例如这篇文章: http: //madskristensen.net/post/How-to-use-the-IHttpAsyncHandler-in-ASPNET.aspx

如果我在 ServeContent 中放置一个同步数据库调用,请求还会异步发生吗?

0 投票
1 回答
430 浏览

c# - 我可以为 ThreadPool.QueueUserWorkItem 定义频率检查吗?

我实施了一个System.Web.IHttpAsyncHandler来限制文件下载的网站带宽使用。一旦定义了用户带宽,我需要byte[]每秒发送一次(或者准确地说是 1000 毫秒)。就像是:

一旦进入ThreadPool.QueueUserWorkItem,我就失去了对代码执行频率的控制,所以它不需要一秒钟的时间来执行,这种差异反映在下载吞吐量上。

所以,我的问题是:

  1. 我可以定义ThreadPool.QueueUserWorkItem检查间隔吗?
  2. 如果没有,是否有另一种方法来实现此要求(带宽限制?)
  3. 如果没有,我可以养一匹小马吗?

TIA

0 投票
1 回答
1993 浏览

c# - 通过 IHttpAsyncHandler 发送文件时遇到问题

我正在使用 IHttpHandler 调用 web 服务并将生成的 byte[] 作为下载的文件附件返回给客户端。这很好用,但是当我尝试将 IHttpHandler 更改为 IHttpAsyncHandler 时,会显示文件下载对话框,但文件不会开始/完成下载。我究竟做错了什么?

0 投票
1 回答
281 浏览

iis-7 - IHttpAsyncHandler 导致 UnathorizedAccessException

在我圣诞节假期的最后几天,当我尝试通过我的 ASP.NET 应用程序使用 IHttpAsyncHandler 的实现和 IRequiresSessionState 来读取远程共享上的 XML 文件时,我一直在与 UnathorizedAccessException 作斗争。

经过很多头痛,并得出结论认为处理程序之外的代码完美无缺(请参阅:访问权限),我认为这可能是一些线程问题,所以我将 IHttpAsyncHandler 更改为 IHttpHandler,问题就消失了。

在这里困扰我的是,出于测试目的,我实际上并没有使用 IHttpAsyncHandler 实现(因此,我没有使用 BeginProcessRequest 和 EndProcessRequest - 只有同步版本,ProcessRequest。

任何人都可以尝试解释手头的问题吗?

异步使用处理程序有一些好处,因为我可以预先缓存要稍后在应用程序中传递的值,但要让它工作,我必须通过似乎只在实现 IHttpAsyncHandler 时才出现的安全问题.

提前感谢您的帮助 - 祝您节日快乐 :-)

0 投票
2 回答
3662 浏览

c# - 可重用异步 HttpHandler 的模式

我目前正在开发一个自定义 HttpHandler (用于压缩/组合 CSS,但这对于这个问题并不重要)。

我从一个简单的 reusable=true 同步 HttpHandler 开始,就像我们都知道的那样。

现在我正在尝试将其改进为异步处理程序(因为它使用 IO 功能并且在非常繁忙的网站上使用)。

我的第一次尝试(这似乎工作正常):

这是一个不可重用的httphandler(从我读到的,IsReusable 应该是假的,因为这个处理程序有状态(asyncProcessRequest 字段)。

现在我想让它可重复使用。所以我的第一个想法是创建一个 IAsyncResult / Action 字典,如下所示:

这是一个正确的模式吗?还是我走远了?

它似乎有效(我没有收到任何错误或奇怪的行为),但在将其投入生产之前,我想与比我更有经验的人验证编写这些 Http 处理程序..

提前致谢!

0 投票
2 回答
1924 浏览

asynchronous - ASP.Net:IHttpAsyncHandler 和 IRequiresSessionState 不起作用

我已经实现了一个 IHttpAsyncHandler。我正在从具有该处理程序的小部件的网页进行大约 5 次不同的 AJAX 调用。

其中一个小部件需要大约 15 秒才能加载(因为数据库查询很大),其他小部件都应该在一秒钟内加载。处理程序以同步方式响应。

我得到的结果非常不一致。ProcessRequest 方法正在使用 Session 和其他类级别的变量。这是否会导致不同的请求使用相同的线程而不是每个线程都拥有?

我得到这个...

请求 1 ---> 响应 1 秒
请求 2 ---> 响应 14 秒
请求 3 ---> 响应 14.5 秒
请求 4 ---> 响应 15 秒
请求 5 ---> 响应 15.5 秒

但我正在寻找更像这样的东西......

请求 1 ---> 响应 1 秒
请求 2 ---> 响应 14 秒
请求 3 ---> 响应 1.5 秒
请求 4 ---> 响应 2 秒
请求 5 ---> 响应 1.5 秒

在没有发布太多代码的情况下,我对 IHttpAsyncHandler 方法的实现非常标准。

在我的 IHttpAsyncHandler.BeginProcessRequest 方法中放置一个调试断点,我可以看到该方法在最后一个 Process 完成之前不会被触发。

Also my machine.config has this entry... processModel autoConfig="true" with no other properties set.

I'm calling the handler like this...
$.ajax( { type: "GET", url: "../HTML/HtmlHandler.ashx", cache: true, dataType: "text", data: { html: name }, success: function(html) { //$(function() { //console.log(tabname); //console.log("msg:" + msg); $("#" + name + "holder").html(html); //checkAllLoaded(); ClientHome_init(''); //}); },

What else do I need to check for?