问题标签 [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 投票
1 回答
238 浏览

asp.net - Comet - 使用 IHttpAsyncHandler 进行 HTTP 流式传输 - 块不起作用

我正在尝试通过使用 IHttpAsyncHandler 和刷新来实现 HTTP 流。

基本上我每隔一段时间就会刷新响应 - 保存打开的连接直到超时 - 然后客户端应该启动另一个连接。

刷新确实有效,并且客户端在刷新时会收到刷新,但是响应正在聚合。例如,如果我发送以下刷新:

客户端将获得以下刷新(在 XMLHttpRequest.responseText 中):

正如您所看到的,最终客户端将不得不处理一个非常大的消息(其中将包含所有先前的刷新)。有没有办法使用冲洗,但在每次冲洗时清洁响应?

请注意,响应标头包含此标头:“Transfer-Encoding:chunked”,这意味着我确实应该以块的形式获取内容,而是获取聚合消息。

0 投票
1 回答
892 浏览

c# - 如何在 asp.net 中使用 IHttpAsyncHandler 向客户端发送多个确认

我已经在我的班级中实现了 IHttpAsyncHandler 以在后台执行 5-6 个长时间运行的进程,并在每个任务开始时向客户端确认。

早些时候我使用一个会话变量并使用当前任务状态更新它,并以 5 秒的间隔从 jquery 向服务器发出异步调用请求以获取当前状态,但这种实现并不好,因为它不断地向服务器发出请求以获取状态.

然后我在我的应用程序中实现了 IHttpAsyncHandler,现在服务器本身向客户端发送确认,但根据我的实现,我只能发送一个确认!如果我尝试发送多个,则其给出错误为“对象引用未设置为对象的实例”

请检查我的示例代码。

在我的代码中,ExecuteFirst() 方法可以正常向客户端发送确认,但 ExecuteSecond() 不会发送确认其给出错误。

我看了很多,但没有找到正确的方式向客户发送多个确认。

这是我的示例代码,如果有人有任何想法,请帮助我。

Javascript

StartLongRunningProcess.ashx.cs

AsyncRequestResult.cs

0 投票
1 回答
116 浏览

c# - IHttpAsyncHandler 的线程

我读了这篇文章,对 IHttpAsyncHandler 有所了解。

根据下图,我调用 AsyncHandler 时创建了 2 个线程。

当一个请求到来时,IIS会抓取一个线程——线程1来处理这个请求,当它调用beginXXX方法时,会创建线程2来处理这个真正的逻辑。

我的问题是:

当线程 2 运行时,连接仍然保持,等待响应。

当线程 2 运行时,线程 1 的状态是什么?是在睡觉吗?还是被释放了?

如果线程 1 正在休眠,当线程 2 完成时,线程 1 被唤醒并发送响应?

如果线程 1 被释放,当线程 2 完成时,是否有一个新线程被创建为线程 1?这个新的线程 1 将响应发送给客户端。

线程 1 和线程 2 在同一个线程池中,不是吗?如果是这样,可用线程数是平衡的,这样做的目的是什么?

在此处输入图像描述

0 投票
0 回答
87 浏览

c# - IHttpAsyncHandler 刷新 - 工作线程与 io 线程

我正在使用IHttpAsyncHandlerwithBeginProcessRequestEndProcessRequest方法。假设我在方法下有以下代码EndProcessRequest

Write方法本身仅写入内部缓冲区,但EndProcessRequest完成后,缓冲区将刷新到流并关闭连接。

我的问题是哪个线程正在执行刷新?运行EndProcessRequest代码的工作线程还是 IO 线程?

0 投票
2 回答
321 浏览

c# - 图像服务器的 IHttpHandler 或 IHttpAsyncHandler

我的任务是开发一个图像服务器,它将:

  • 从磁盘加载图像
  • 根据 HTTP 参数调整它的大小
  • 将一个或多个水印应用于原始图像

问题是我应该使用什么技术,我将使用IHttpHandler,但我想知道在IHttpAsyncHandler这种情况下使用是否会更快?

我可以从异步处理图像中受益IHttpHandler吗?

另外,也许我应该考虑一些高级框架,例如 NancyFx 或者只是从控制器(MVC2)返回图像?

0 投票
1 回答
176 浏览

c# - IHttpAsyncHandler.EndProcessRequest 中的 IAsyncResult 可以为空吗?

考虑以下代码:

ReSharper 建议result永远不会null(通过指示条件始终为假)。但是,因为IAsyncResult是引用类型,null所以是可能的值。我想出了两种可能:

  • 某种可用的元数据允许 ReSharper 得出结论,这result是永远不可能的null。查看IHttpAsyncHandler使用 ReSharper 的源代码,我没有看到任何与EndProcessRequest.
  • ReSharper 知道这些IHttpAsyncHandler保证IAsyncResult永远不会是null. 但是,无论哪种方式,文档都没有提供任何线索。

IAsyncResult不会为 null似乎是合理的,因为它允许我们跟踪异步任务的进度。有人可以提供一些见解吗?

0 投票
0 回答
981 浏览

c# - 新作业中的 HttpContext Session null (Quartz.Net)

我想为 Web 数据处理组合一个调度程序以限制作业数量,因此我使用了 Quartz.Net 框架并将其放在 IHttpAsyncHandler 之上。

我已经通过参数将 HttpContext 传递给作业,这工作正常,但是当我想获取 context.Session 时它为空 - 这是有道理的,因为我将处理作业添加到它自己的队列中并且 HttpAsyncHandler 进程已经完成。我没有尝试过,但我认为返回结果也会因为同样的原因而失败:

我的一个想法是我可以声明一个锁并将这个循环添加到 ProcessRequest:

但不确定这是最好的主意。

如何最好地保持处理程序的 HttpContext 处于活动状态,以便我可以返回结果?或者我什至可以将 Quartz 作业的结果返回给 ProcessRequest(就像 Javascript 中的承诺,即 $.when.then),然后通过 context.Response 将其发送回?

还是完全废弃 Quartz 并让 HttpAsyncHandler 首先进行作业调度会更好?

https://stackoverflow.com/questions/33642861/processing-job-scheduling-with-httpasynchandler

0 投票
1 回答
43 浏览

asp.net - 如何获得在 ashx 文件中编写不安全代码的权限?

如何获得在 ashx 文件中编写不安全代码的权限?当我在 asp 中使用不安全代码时,我遇到以下错误。

不安全代码可能仅在使用 /unsafe 编译时出现

0 投票
0 回答
98 浏览

c# - 需要帮助在我的方法上实现 IHttpAsyncHandler 以进行 API 调用

所以我有一个 DNN 模块,它基本上只是一个方框,用于放置文件,然后调整大小、重命名、在本地保存并上传到 Azure blob 容器。现在我需要做的是进行 API 调用(我自己做的)以根据用户的 DNN ID 从数据库中获取一些信息。到目前为止,我发现的所有用于进行 API 调用的方法都需要异步运行,因此我需要将派生该类的接口从 IHttpHandler 更改为 IHttpHandlerAsync。

然而,通过 IHttpHandlerAsync 寻求帮助已被证明是相当困难的。我对网络开发很陌生,所以请原谅任何明显的错误或误解。

public async Task UploadFile(HttpContext context)

UploadFile 方法启动 GetDogAsync() 以将返回的信息存储在表中。

我在这里获得了 IHttpAsyncHandler 的示例:https ://madskristensen.net/blog/how-to-use-the-ihttpasynchandler-in-aspnet/

但我不确定如何实现它?现在我得到一个“System.NullReferenceException:'对象引用未设置为对象的实例。'”将图像拖入上传框中时出现异常。我希望我能准确地告诉您异常的来源,但调试很困难,因为该模块只能在本地托管的 DNN 网站上进行测试。

我确定我只是没有正确使用 IHttpAsyncHandler 接口,因此任何指向正确方向的指针都将不胜感激。