移动一个时间带走进程远离我的asp.net应用程序

本文关键字:远离我 远离 我的 asp 应用程序 net 进程 带走 时间 一个 移动 | 更新日期: 2023-09-27 17:54:00

我的Asp.net应用程序生成一个动态pdf。有时这需要一段时间,而且是一个相当繁重的过程。实际上,我不希望我的用户等待pdf文件,只要它生成后发送到他们的邮箱。

所以我尝试了一个web服务。我正在传递一个id(从数据库中获取数据)和一些字符串到webservice的方法。

但是对于web服务(即使是异步调用),客户端也只在pdf生成后接收其响应。所以用户仍然需要等待。

所以我有点卡住了,一定是我忽略了什么

移动一个时间带走进程远离我的asp.net应用程序

你不需要一个webservice来获得异步调用的能力。

您可以在ASPX页面中使用ThreadPool.QueueUserWorkItem()作为"即发即弃"的方法,然后返回带有某种"工作项id"的回复——比如收据或订单号。

在传递给QUWI的WaitCallback中生成PDF。当pdf准备好了,WaitCallback可以发送一封电子邮件。


如果你想让函数在网页之外可访问,请使用webservice。

问题是,在您的ASP。. NET页面代码,您必须同步调用web服务,以便页面等待web服务返回。您应该尝试异步调用web服务(或在不同的线程上),然后不要等待它完成。通常,visual studio生成的代理已经具有可以使用的异步重载。

或者,你可以修改你的web服务代码——本质上,当请求到你的web方法时,你可以在不同的线程上开始PDF生成,这样你的web方法可能会结束,告诉你的客户端(在这种情况下是页面)请求已经被成功地安排处理。

我知道有两种方法

第一方式;在后面的asp.net代码中(在xxx.aspx.cs文件中),你可以定义一个void方法,然后你可以像下面这样启动一个线程来调用该方法。

protected void SenMail(object prms)
{
    int id = int.Parse(prms.ToString());
    //mail sending proces
}

//starting SendMail method asynchronous
Thread trd = new Thread(SenMail);
trd.Start(idValue);

第二种方式;

你可以创建一个像"SendMail"这样的邮件发送者页面。,那么你就可以在javascript中发出ajax请求,而无需等待任何响应。可以将id值作为请求参数传递给aspx页面。