Asp.net 在开发队列作业以在两个应用程序之间交互时需要建议
目前,我的服务器中有一个web应用程序和一个wins表单应用程序。基本上,web应用程序将收到来自用户的请求,该请求将发送到wins表单应用程序以继续(wins表单需要大约1分钟来完成请求) 假设两个用户通过web应用程序同时发送一个请求,我需要开发一个队列作业来按顺序维护请求 1) 用户A发出请求>请求将存储到队列作业中 2) 用户B发出请求>请求将存储到队列作业中 3) 队列作业将向wins表单发送第一个请求。第一个请求完成后,接下来是第二个请求 所以我的问题是,这个队列作业应该在web应用程序内部开发吗?还是应该以独立的形式开发 是否有在ASP.NET中创建队列作业的示例代码 或者任何人都可以建议更好的解决方案?Asp.net 在开发队列作业以在两个应用程序之间交互时需要建议,asp.net,queue,Asp.net,Queue,目前,我的服务器中有一个web应用程序和一个wins表单应用程序。基本上,web应用程序将收到来自用户的请求,该请求将发送到wins表单应用程序以继续(wins表单需要大约1分钟来完成请求) 假设两个用户通过web应用程序同时发送一个请求,我需要开发一个队列作业来按顺序维护请求 1) 用户A发出请求>请求将存储到队列作业中 2) 用户B发出请求>请求将存储到队列作业中 3) 队列作业将向wins表单发送第一个请求。第一个请求完成后,接下来是第二个请求 所以我的问题是,这个队列作业应该在web应用
使用System.Collections.Generic;
using System.Collections.Generic;
Queue<task> Q = new Queue<task>();
public void Proccess_Request(string info)
{
task t = new task();
t.INFO = info;
Q.Enqueue(task);
}
public void DoWork()
{
//
while (Q.Count > 0)
{
task t = Q.Dequeue();
//Process task t
}
}
public class task
{
public string INFO { get; set; }
// Whatever task properties you need
}
队列Q=新队列();
公共作废处理请求(字符串信息)
{
任务t=新任务();
t、 信息=信息;
排队(任务);
}
公共工作
{
//
而(Q.Count>0)
{
任务t=Q.Dequeue();
//过程任务t
}
}
公开课任务
{
公共字符串信息{get;set;}
//您需要的任何任务属性
}
您需要构建接受表单数据并将其传递给方法
Process\u Request
的服务。您还需要每x分钟调用一次方法DoWork
,或者让它监听Process\u请求以触发。或者您可以使用MSMQ并以这种方式执行。ASP.NET站点向队列发送消息,winforms应用程序(或服务)绑定到队列,因此当消息进入队列时,它将拾取、处理消息并让消息继续执行,直到队列中不再有消息。您可以使用MSMQ处理跨域队列通信,例如。那么有没有自动发送到表单?表单上的选择系统如何?在该系统中,可以选择新请求,并根据其提交的时间进行排序?(只是提出一个备选方案:D)我假设winform作为一个服务,那么窗体应该轮询队列或注册一个listner。Web服务应该只转发请求。您的表单可以配置为使用任务,以便一次可以处理多个请求。@tymeJV,winform收到web表单的请求后将立即执行。wins表单将自动执行,任何用户都不会使用它。所以选择制度不是我的选择。无论如何谢谢。@jcwrequests,由于某些限制,win表单只允许处理一个请求。同意Web服务只应转发请求。但是,我也不知道如何创建队列。好的,当winform接收到任务时,使用Q.Enqueue(Request)
,然后循环Q.Dequeue
,直到队列为空。还建议使用backgroundworker保持UI的响应性,并向您显示队列有多大,以及每个作业的状态。谢谢!我来看看。这个方法看起来不错。但似乎需要对调用DoWork的间隔时间进行硬编码。我不想让它太混乱。DoWork将是后台工作人员调用的方法。在单独的线程上调用后台工作程序之前,只需检查它是否“忙”。您不希望DoWork同时运行两次,也不希望冻结应用程序,无法从您的网站接受更多任务。我在使用backgroundworkers时参考的代码示例。