我有一个长期运行的操作,您可能会在我的另一个问题中阅读(供您参考,这里是first和second)。
在整个交易开始时,项目公开了一个表单,用户应在该表单中指定有关 XML 文件的所有必要信息并上传 XML 文件本身。在该方法中,所有用户输入数据都被捕获并转到处理此类文件之王的 WCF 服务。控制器仅获得此类处理的任务 ID。然后用户被重定向到进度条页面并定期检索任务完成状态,刷新进度条。
所以我的问题来了。处理 XML 文件时如果结束,如何获取结果并将其显示给用户?
我知道 HTTP 是无状态协议,但是在这种情况下有 cookie 机制可以提供帮助。当然,我可能只是将处理结果保存到一些临时的地方,比如 WCF 服务器中的一个静态类,但是服务负载很高,所以它会吃掉所有提供的内存。
换句话说,我想将任务传递给 WCF 服务(使用 netNamedPipeBinding)并尽可能快地接收结果。我想将临时保存结果转义到某个缓冲区并等到客户端将其收集回来。
据我所知,不是在服务端而是在客户端使用临时缓冲区:
using (XmlProcessingServiceClient client = new XmlProcessingServiceClient())
{
client.AnalyzeXmlAsync(new Task { fileName = filePath, id = tid });
client.AnalyzeXmlCompleted += (sender, e) =>
{
System.Web.HttpContext.Current.Application.Lock();
// here is I just use single place for all clients. I know it is not right, it is just for illustrating purposes.
System.Web.HttpContext.Current.Application["Result"] = e;
System.Web.HttpContext.Current.Application.UnLock();
};
}