我有一个ashx的hanler,请问handler中如何先回复再完成数据处理?

bueraiye 2016-05-27 11:19:12
最近在做微信公众号开发,在接收微信公众号消息的时候,我使用一个ashx的handler页面来接收。但是微信要求在接收到了以后需要在五秒内回复空串,否则会提示错误。我把消息的XML信息处理再写入数据库的时间是远远超过五秒了。所以我想可不可以先回复空串再进行数据处理。

我的代码是这样的,
          
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
{
//服务器无法保证在五秒内处理并回复,直接回复空串
HttpContext.Current.Response.Output.Write("");

using (Stream stream = HttpContext.Current.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, (Int32)stream.Length);
postString = Encoding.UTF8.GetString(postBytes);
}

//然后数据处理,写入数据库
..........

}


但是这个代码实际运行的时候还是报错,错误是500 internal server error, 应该还是我没有及时回复微信服务器空串。但是在我的代码里以及实在第一时间先回复空串,再进行数据处理了。
我也尝试用了
  HttpContext.Current.Response.End();
Output.Write("");
之后,这一次服务器回复OK了,但是数据却并没有处理,好像是因为在end()之后,这个页面就停止继续运行了。请问这种情况如果我需要先回复空串,再继续在该页面处理数据该怎么做呢?谢谢大家啦。
...全文
173 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjp1234airen4385 2016-06-02
  • 打赏
  • 举报
回复
最喜欢接分的帖子了
bueraiye 2016-06-01
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
[quote=引用 楼主 u013413766 的回复:] 最近在做微信公众号开发,在接收微信公众号消息的时候,我使用一个ashx的handler页面来接收。但是微信要求在接收到了以后需要在五秒内回复空串,否则会提示错误。我把消息的XML信息处理再写入数据库的时间是远远超过五秒了。所以我想可不可以先回复空串再进行数据处理。
回复空串,微信就会作为异常而处理。如果你回复一个空的“文本信息”,这又会在客户端(微信终端)上显示一个空的短信息对话框。 我无法想象你普通的处理为什么会“远远超过5秒”时间。我的概念中,平均业务处理不会超过200毫秒。如果有超过2秒钟的业务,一般来说,都应该设计为异步处理的。但是此异步非彼“异步”,这个异步是指业务逻辑上的异步,例如人家把“下单”跟“发货”分离为两个任务,下单是一个订单流程中的一个动作,而发货是同一个订单流程的另一个动作,它们之间可以相隔0.1秒也可以相隔1个月,因此异步的。 而你的“远远超过5秒”就很难看出你是怎么设计软件的,只能估计是从“根上”就有设计问题。那么一个从根源上其实就搞不起来的系统、不能上线的系统,再怎么努力其实也推不出去的。就算是微信公众平台不给你设置这个“5秒钟”的门槛,也经不起市场检验。 因此还是要解决你的“远远超过5秒钟”的深层问题。这里简单回复任何技术问题,都只是皮毛。[/quote] 谢谢这么详细的解答,我后来发现是数据库设置有点问题,一直无法写入,所以才会导致处理时间超过五秒。看来还是应该先返回空串,再进行数据处理。最后选择了使用一个新线程专门返回空串。
  • 打赏
  • 举报
回复
ThreadPool Task
江南小鱼 2016-05-28
  • 打赏
  • 举报
回复
启动一个新线程处理你的xml
  • 打赏
  • 举报
回复
引用 楼主 u013413766 的回复:
最近在做微信公众号开发,在接收微信公众号消息的时候,我使用一个ashx的handler页面来接收。但是微信要求在接收到了以后需要在五秒内回复空串,否则会提示错误。我把消息的XML信息处理再写入数据库的时间是远远超过五秒了。所以我想可不可以先回复空串再进行数据处理。
回复空串,微信就会作为异常而处理。如果你回复一个空的“文本信息”,这又会在客户端(微信终端)上显示一个空的短信息对话框。 我无法想象你普通的处理为什么会“远远超过5秒”时间。我的概念中,平均业务处理不会超过200毫秒。如果有超过2秒钟的业务,一般来说,都应该设计为异步处理的。但是此异步非彼“异步”,这个异步是指业务逻辑上的异步,例如人家把“下单”跟“发货”分离为两个任务,下单是一个订单流程中的一个动作,而发货是同一个订单流程的另一个动作,它们之间可以相隔0.1秒也可以相隔1个月,因此异步的。 而你的“远远超过5秒”就很难看出你是怎么设计软件的,只能估计是从“根上”就有设计问题。那么一个从根源上其实就搞不起来的系统、不能上线的系统,再怎么努力其实也推不出去的。就算是微信公众平台不给你设置这个“5秒钟”的门槛,也经不起市场检验。 因此还是要解决你的“远远超过5秒钟”的深层问题。这里简单回复任何技术问题,都只是皮毛。
  • 打赏
  • 举报
回复
首先,如果你的数据跟 Response 无关,就可以异步操作。例如u
ThreadPool.QueueUserWorkItem(h =>
{
     .........
});
这里的过程应该与 Response 无关。 另外,我们使用 NoSql 的目的是为了每秒能够写10万以上数据、每秒读(按索引查询)几十万记录。关系数据库当大量多用户并发时其“数据库事务”的瓶颈会造成性能要降低几十倍(关系数据库的事务只能做到每秒百八十个,而不是十万个)。 你说你写一次数据要远远超过5秒钟,我觉得这应该在软件设计上下功夫了,已经严重超出我能想象的范围了。
内容概要:本文提出了一种基于场景概率的含可再生能源数据心园区容量配置与日调度协同优化策略,旨在应对可再生能源出力与算力负载双重不确定性。通过构建多场景模拟真实波动情况,并引入多元宇宙优化算法(MVO)进行高效求解,实现了数据心园区内风、光、储等设备的容量优化配置与多时间尺度日调度计划的协同决策,最终有效降低了系统综合成本,提升了可再生能源消纳率与运行可靠性。该策略充分考虑了源-荷-储多要素间的复杂耦合关系,为高比例可再生能源接入的数据心提供了科学的规划与运行理论支撑。; 适合人群:具备电力系统、能源管理或优化算法基础知识的科研人员、研究生及从事数据心能源规划的工程技术人员。; 使用场景及目标:①为含高比例可再生能源的数据心园区提供科学的容量规划与运行调度方案;②研究多元宇宙优化算法在复杂混合整数非线性规划问题的应用效能;③探索源-荷-储多要素协同优化机制,以提升能源系统的经济性、可持续性与韧性。; 阅读建议:此资源提供了完整的Matlab代码实现,建议读者在深入理解模型构建原理与数学推导的基础上,动手运行和调试代码,重点关注场景生成方法、目标函数设计、约束条件处理以及MVO算法的实现流程,以便透彻掌握该优化策略的核心技术细节与工程应用价值。
内容概要:本文围绕“风光制氢合成氨系统优化研究”展开,基于Cplex求解器,利用Matlab代码实现了对风能、光伏等可再生能源耦合制氢进而合成氨的综合能源系统的优化建模与求解。研究重点在于构建系统各环节(风光发电、电解水制氢、氢气储存、合成氨生产)的数学模型,综合考虑设备投资、运行维护、能源转换效率及碳排放等多重因素,建立以系统全生命周期经济性最优或兼顾环境效益的多目标优化模型,并通过Cplex高效求解,旨在为绿氢及绿色化工品的生产提供科学的规划与运行决策支持。该研究不仅展示了从可再生能源到高附加值化工产品的完整技术链条,也为实现“双碳”目标下的新型能源体系构建提供了重要的理论依据和实践路径。; 适合人群:具备Matlab编程基础、对能源系统建模、优化算法(尤其是线性/混合整数规划)有一定了解的研究生、科研人员及能源领域工程师。; 使用场景及目标:① 学习如何将复杂的综合能源系统(风光-氢-氨)转化为可计算的数学优化模型;② 掌握利用Matlab调用Cplex求解器解决大规模优化问题的方法;③ 研究可再生能源制氢及下游化工应用的经济性与可行性。; 阅读建议:此资源侧重于科研论文的复现,建议读者结合相关领域的专业知识,仔细研读模型的构建逻辑与代码实现细节,并尝试修改参数或模型结构以加深理解。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧