问题标签 [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.
asp.net - 如何使 ASP.NET MVC 从 IRouteHandler.GetHttpHandler() 识别 IHttpAsyncHandler?
在这个问答中,我找到了一种让 ASP.NET MVC 支持异步处理的方法。但是,我不能让它工作。
基本上,这个想法是创建一个新的 IRouteHandler 实现,它只有一个方法GetHttpHandler。GetHttpHandler方法应该返回一个实现而不是 just ,因为有 Begin/EndXXXX 模式 API。IHttpAsyncHandler
IHttpHandler
IHttpAsyncHandler
然后,在文件 Global.asax.cs 的 RegisterRoutes 方法中,注册这个类AsyncMvcRouteHandler。
我在ProcessRequest、BeginProcessRequest和EndProcessRequest设置断点。仅执行ProcessRequest。换句话说,即使AsyncMvcHandler实现了IHttpAsyncHandler。ASP.NET MVC 不知道这一点,只是将其作为IHttpHandler
实现处理。
如何使 ASP.NET MVC 将AsyncMvcHandler视为IHttpAsyncHandler以便我们可以进行异步页面处理?
asp.net - 什么是 ASP.NET 中的 HttpHandler
什么是 ASP.NET 中的 HttpHandler?为什么以及如何使用它?
asp.net - 如何使用 IHTTPAsyncHandler?
想象一下,我有一些代码要从文件的开头到结尾读取,如下所示:
我希望这是完全异步的。当从 IHTTPAsyncHandler 派生时,这段代码会去哪里,获取每一行内容的代码会去哪里?
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:是否有任何可能超出限制的计数器或其他指标,我将如何进一步调查?
编辑:这是负载生成器代码:
asp.net - IHttpAsyncHandler 内部的同步数据库读取
在 asp.net 上,如果我使用 delegate.BeginInvoke 在 IHttpAsyncHandler 中调用同步数据库查询,它在读取数据库时是否仍会释放 asp.net 工作线程?
例如这篇文章: http: //madskristensen.net/post/How-to-use-the-IHttpAsyncHandler-in-ASPNET.aspx
如果我在 ServeContent 中放置一个同步数据库调用,请求还会异步发生吗?
c# - 我可以为 ThreadPool.QueueUserWorkItem 定义频率检查吗?
我实施了一个System.Web.IHttpAsyncHandler
来限制文件下载的网站带宽使用。一旦定义了用户带宽,我需要byte[]
每秒发送一次(或者准确地说是 1000 毫秒)。就像是:
一旦进入ThreadPool.QueueUserWorkItem
,我就失去了对代码执行频率的控制,所以它不需要一秒钟的时间来执行,这种差异反映在下载吞吐量上。
所以,我的问题是:
- 我可以定义
ThreadPool.QueueUserWorkItem
检查间隔吗? - 如果没有,是否有另一种方法来实现此要求(带宽限制?)
- 如果没有,我可以养一匹小马吗?
TIA
c# - 通过 IHttpAsyncHandler 发送文件时遇到问题
我正在使用 IHttpHandler 调用 web 服务并将生成的 byte[] 作为下载的文件附件返回给客户端。这很好用,但是当我尝试将 IHttpHandler 更改为 IHttpAsyncHandler 时,会显示文件下载对话框,但文件不会开始/完成下载。我究竟做错了什么?
iis-7 - IHttpAsyncHandler 导致 UnathorizedAccessException
在我圣诞节假期的最后几天,当我尝试通过我的 ASP.NET 应用程序使用 IHttpAsyncHandler 的实现和 IRequiresSessionState 来读取远程共享上的 XML 文件时,我一直在与 UnathorizedAccessException 作斗争。
经过很多头痛,并得出结论认为处理程序之外的代码完美无缺(请参阅:访问权限),我认为这可能是一些线程问题,所以我将 IHttpAsyncHandler 更改为 IHttpHandler,问题就消失了。
在这里困扰我的是,出于测试目的,我实际上并没有使用 IHttpAsyncHandler 实现(因此,我没有使用 BeginProcessRequest 和 EndProcessRequest - 只有同步版本,ProcessRequest。
任何人都可以尝试解释手头的问题吗?
异步使用处理程序有一些好处,因为我可以预先缓存要稍后在应用程序中传递的值,但要让它工作,我必须通过似乎只在实现 IHttpAsyncHandler 时才出现的安全问题.
提前感谢您的帮助 - 祝您节日快乐 :-)
c# - 可重用异步 HttpHandler 的模式
我目前正在开发一个自定义 HttpHandler (用于压缩/组合 CSS,但这对于这个问题并不重要)。
我从一个简单的 reusable=true 同步 HttpHandler 开始,就像我们都知道的那样。
现在我正在尝试将其改进为异步处理程序(因为它使用 IO 功能并且在非常繁忙的网站上使用)。
我的第一次尝试(这似乎工作正常):
这是一个不可重用的httphandler(从我读到的,IsReusable 应该是假的,因为这个处理程序有状态(asyncProcessRequest 字段)。
现在我想让它可重复使用。所以我的第一个想法是创建一个 IAsyncResult / Action 字典,如下所示:
这是一个正确的模式吗?还是我走远了?
它似乎有效(我没有收到任何错误或奇怪的行为),但在将其投入生产之前,我想与比我更有经验的人验证编写这些 Http 处理程序..
提前致谢!
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?