我有一个要求,我在Web应用程序的服务器上处理一些XML
假设asp.net页面上有一个按钮。当用户点击按钮时,我调用一个函数说 button_click() - >它反过来调用一些服务方法来处理XML。
问题场景::
现在假设我正在处理XML,我完成了50%的处理。我注意到我必须确认用户,因为XML中的某些值无效。此时我想向用户显示提示是或否(可能是javascript提示)然后:
1. 如果用户点击确定 - >我想继续处理剩下的50%的XML
2. 如果用户点击否 - >我想停止处理并显示错误消息。
经过大量的试验和错误以及我开发Web应用程序的知识,我觉得没有办法做到这一点,除非我在用户点击OK时再次使用一些标志开始执行我的服务。但我的同事们并不相信,他们说必须有办法做到这一点,我缺乏知识。 它安静有趣的问题。
**注意:我们实际上是将现有的桌面应用程序移植到Web中,因此出现了对话框的问题!
我请你帮助我这个专家吧!另外我想知道还有其他方法可以处理这种情况吗?
编辑:添加更多信息。
实际上我在这里通过XML处理的意思是每个用户都有一些服务器使用WINDOWS服务创建的XML。当用户点击某个按钮时,我们必须处理该XML,如果一切正确,我们必须调用第三方服务并获取结果并更新数据库。
有时会发生什么,创建XML的WINDOWS服务会放置一些无效的值(我们无法纠正它们,因为它不在我们的控制之下)。因此,我们需要向用户确认某些值无效以及是否要继续。通过这种方式,我们希望能够更加确定我们是否通过用户的同意发送无效值。问题是我们有时会在XML文件末尾识别出值无效(我们无法更改),所以我们不想再次处理XMl!
答案 0 :(得分:0)
您应该设置一个进程,使前端(jquery / JavaScript)不断轮询来自长时间运行进程的状态更新。这种情况的典型用途是您希望更新百分比完成量表,以便用户可以看到正在进行的进度,除非在这种情况下,您检索状态代码和/或消息,而不是检索%done值。如果有消息,请将其显示给用户并更新回服务器;一旦状态代码被发送到前端,被支持的进程将进入等待状态,并且还需要轮询该用户响应的标志(例如,可以像db表中的值一样简单)。 p>
以下是%完成类型轮询程序的示例:
http://sudhirmurthy.blogspot.com/2011/12/update-on-long-running-server-tasks.html
答案 1 :(得分:0)
由于您还没有详细说明“ XML处理”的实际细节,我将假设它正在上传/解析XML文档(可能是某种类型的导入)。 / p>
第一步是让服务器能够暂停在特定状态下执行(或处理)XML。你能够做到这一点的唯一方法是存储处理的当前状态,例如然后需要将这个状态存储在允许服务器从中断的地方继续存储,即服务器上的临时文件,内存缓存,后端数据库 - 这取决于你选择最好的存储适合您的申请。
下一步是在处理暂停时通知客户端。由于这应该是一个原子操作,你可以使用一种名为Long Polling的技术来保持与服务器连接更长时间(更少的轮询),并使通知感觉更加即时。或者,您可以使用常规轮询并定期查询状态 - 无论哪种方式,都是来自服务器的特定响应,它将触发客户端抛出对话框。
最后,您想告诉服务器如何继续 - 这可以通过一个简单的API调用完成,因为服务器需要知道它才能继续处理。
示例,此API可能如下所示:
public void ConfirmProcessing(Guid processingInstanceId, bool cancel)
{
var processingState = GetProcessingStateFromStorage(processingInstanceId);
if (!cancel)
{
// resume processing
}
else
{
// discard processing
}
}
当您收到来自服务器的通知以进行确认时,它可以发送一个唯一的ID(即processingInstanceId
),然后您通过API发送回来,并带有指示您希望如何继续的标志,例如继续/取消。