0

我有一个要求,我在 Web 应用程序的服务器上处理一些 XML
假设在 asp.net 页面上有一个按钮。当用户单击按钮时,我调用一个函数说button_click() -> 它又调用一些服务方法来处理 XML。

问题场景::
现在假设我正在处理 XML,我完成了 50% 的处理。我注意到我必须得到用户的确认,因为 XML 中的某些值是无效的。此时我想向用户显示一个提示说是或否(可能是 javascript 提示),然后:
1.如果用户单击 OK -> 我想继续处理剩余 50% 的 XML
2.如果用户单击 NO -> 我想停止处理并显示错误消息。

经过大量的试验和错误以及我开发 Web 应用程序的知识后,我觉得没有办法做到这一点,除非我在用户单击 OK 时使用一些标志再次开始执行我的服务。但我的同事们并不相信,他们说一定有办法做到这一点,而我缺乏这方面的知识。 它安静是一个有趣的问题

**注意:我们实际上是将现有的桌面应用程序移植到网络中,因此会出现对话框问题!

我请求你帮我解决这个问题!另外我想知道有没有其他方法可以处理这种情况?

编辑:添加更多信息。
实际上,我在这里所说的 XML 处理的意思是每个用户都有一些由服务器使用 WINDOWS 服务创建的 XML。当用户单击某个按钮时,我们必须处理该 XML,如果一切正确,我们必须调用第三方服务并获取结果并更新数据库。
有时发生的情况是,创建 XML 的 WINDOWS 服务放置了一些无效值(我们无法更正它们,因为它不受我们的控制)。因此,我们需要向用户确认某些值无效以及他是否要继续。通过这种方式,我们希望双重确保我们在用户同意的情况下发送无效值。问题是我们有时会在 XML 文件的末尾识别出无效的值(我们无法更改),所以我们不想再次处理 XMl!

4

2 回答 2

0

您应该设置一个进程,让前端(jquery/JavaScript)不断地从长时间运行的进程中轮询状态更新。一个典型的使用是你想更新一个完成百分比表,这样用户就可以看到正在取得的进展,除了在这种情况下,你不是检索 %done 值,而是检索一个状态代码和/或消息。如果有消息,将其显示给用户并更新回服务器;一旦状态码被发送到前端,支持的进程将进入等待状态,并且还需要轮询标志(例如可以像 db 表中的值一样简单)以获取用户响应。

以下是 %done 类型轮询过程的示例:

http://sudhirmurthy.blogspot.com/2011/12/update-on-long-running-server-tasks.html

于 2012-12-14T12:01:46.557 回答
0

由于您没有详细说明您的“ XML 处理”的实际细节,我将假设它正在上传/解析 XML 文档(可能是某种导入)。

第一步是让您的服务器能够在特定状态下暂停XML 的执行(或处理)。您能够做到这一点的唯一方法是存储处理的当前状态,例如行号、已处理的段等。然后需要将该状态存储在允许服务器从中断处继续的地方即服务器上的临时文件、内存缓存、后端数据库——由您来选择最适合您的应用程序的存储。

下一步是在处理暂停时通知客户端。由于这应该是一个原子操作,您可以使用一种称为长轮询的技术来保持与服务器的连接更长时间(更少轮询),并使通知感觉更加即时。或者,您可以使用定期轮询并定期查询状态 - 无论哪种方式,服务器的特定响应都会触发客户端抛出对话框。

最后,您想告诉服务器如何继续 - 这可以通过简单的 API 调用来完成,因为服务器拥有继续处理所需的所有信息。

一个例子,这个 API 可能看起来像:

public void ConfirmProcessing(Guid processingInstanceId, bool cancel)
{
     var processingState = GetProcessingStateFromStorage(processingInstanceId);
     if (!cancel)
     {
         // resume processing
     }
     else
     {
         // discard processing
     }
}

当您收到来自服务器的确认通知时,它可以发送一个唯一的 id(即processingInstanceId),然后您通过 API 将其发送回来,并带有一个标志,指示您希望如何继续,例如继续/取消。

于 2012-12-14T13:06:45.587 回答