Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在开发队列作业以在两个应用程序之间交互时需要建议_Asp.net_Queue - Fatal编程技术网

Asp.net 在开发队列作业以在两个应用程序之间交互时需要建议

Asp.net 在开发队列作业以在两个应用程序之间交互时需要建议,asp.net,queue,Asp.net,Queue,目前,我的服务器中有一个web应用程序和一个wins表单应用程序。基本上,web应用程序将收到来自用户的请求,该请求将发送到wins表单应用程序以继续(wins表单需要大约1分钟来完成请求) 假设两个用户通过web应用程序同时发送一个请求,我需要开发一个队列作业来按顺序维护请求 1) 用户A发出请求>请求将存储到队列作业中 2) 用户B发出请求>请求将存储到队列作业中 3) 队列作业将向wins表单发送第一个请求。第一个请求完成后,接下来是第二个请求 所以我的问题是,这个队列作业应该在web应用

目前,我的服务器中有一个web应用程序和一个wins表单应用程序。基本上,web应用程序将收到来自用户的请求,该请求将发送到wins表单应用程序以继续(wins表单需要大约1分钟来完成请求)

假设两个用户通过web应用程序同时发送一个请求,我需要开发一个队列作业来按顺序维护请求

1) 用户A发出请求>请求将存储到队列作业中

2) 用户B发出请求>请求将存储到队列作业中

3) 队列作业将向wins表单发送第一个请求。第一个请求完成后,接下来是第二个请求

所以我的问题是,这个队列作业应该在web应用程序内部开发吗?还是应该以独立的形式开发

是否有在ASP.NET中创建队列作业的示例代码

或者任何人都可以建议更好的解决方案?

使用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时参考的代码示例。