.NET 应用程序的按钮单击需要告诉外部服务从队列开始处理 (msmq)
Button click of .NET application needs to tell an external service to start processing from a queue (msmq)
我有一个 asp.net 用户将与之交互的网络表单应用程序。当用户从站点中选择某些项目并单击按钮进行处理时。 Web 应用程序将为用户选择的每个项目向 msmq 添加一条消息。
我想弄清楚的部分:
如果我的第二个应用程序的工作是处理队列 (msmq),它应该是什么类型的应用程序。关键是第二个应用程序需要闲置,直到我的 asp.net webapp 告诉它 'Process' 按钮被点击,然后它会继续,检查队列并处理它。我不希望它每分钟左右不断地检查队列,只在命令时检查队列。
Windows 服务,Web 服务,Web API?我目前有一个 Windows 服务,每 30 秒检查一次队列。我怎样才能让它按需工作而不是不断检查?
此处改写略有不同:
用户在 .NET 应用程序中并选择项目,然后单击处理。
.Net应用程序添加需要处理的项目到队列(msmq).
.NET 应用程序将通知其他应用程序单击了处理按钮,它应该开始处理队列。一旦处理完队列,附加应用程序应该返回某种空闲模式。
这里最重要的是,我不希望它出现在每分钟检查队列中是否有项目的计时器上。这将耗尽资源 运行 24/7.
可能是我对msmq的某些功能不熟悉。有没有一种方法可以让 msmq 告诉我的服务它收到了队列中的消息,继续处理它们。而不是我的 .net 应用程序与服务对话?
您可以使用现有的 Windows 服务。但是与其每 30 秒左右检查一次队列,为什么不向队列添加一个仅在消息到达时才响应的侦听器。请检查下面的代码段。
static void Main(string[] args)
{
//create an event
MessageQueue msmq = new MessageQueue("queuename");
//subscribe to the event
msmq.ReceiveCompleted += msmq_ReceiveCompleted;
//start listening
msmq.BeginReceive();
}
//this will be fired everytime a message is received
static void msmq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
//get the MessageQueue that we used
MessageQueue msmq = sender as MessageQueue;
//read the message
//and process it
Message msg = msmq.EndReceive(e.AsyncResult);
//because this method is only fired once everytime
//a message is sent to the queue
//we have to start listening again
msmq.BeginReceive();
}
我有一个 asp.net 用户将与之交互的网络表单应用程序。当用户从站点中选择某些项目并单击按钮进行处理时。 Web 应用程序将为用户选择的每个项目向 msmq 添加一条消息。
我想弄清楚的部分:
如果我的第二个应用程序的工作是处理队列 (msmq),它应该是什么类型的应用程序。关键是第二个应用程序需要闲置,直到我的 asp.net webapp 告诉它 'Process' 按钮被点击,然后它会继续,检查队列并处理它。我不希望它每分钟左右不断地检查队列,只在命令时检查队列。
Windows 服务,Web 服务,Web API?我目前有一个 Windows 服务,每 30 秒检查一次队列。我怎样才能让它按需工作而不是不断检查?
此处改写略有不同:
用户在 .NET 应用程序中并选择项目,然后单击处理。
.Net应用程序添加需要处理的项目到队列(msmq).
.NET 应用程序将通知其他应用程序单击了处理按钮,它应该开始处理队列。一旦处理完队列,附加应用程序应该返回某种空闲模式。
这里最重要的是,我不希望它出现在每分钟检查队列中是否有项目的计时器上。这将耗尽资源 运行 24/7.
可能是我对msmq的某些功能不熟悉。有没有一种方法可以让 msmq 告诉我的服务它收到了队列中的消息,继续处理它们。而不是我的 .net 应用程序与服务对话?
您可以使用现有的 Windows 服务。但是与其每 30 秒左右检查一次队列,为什么不向队列添加一个仅在消息到达时才响应的侦听器。请检查下面的代码段。
static void Main(string[] args)
{
//create an event
MessageQueue msmq = new MessageQueue("queuename");
//subscribe to the event
msmq.ReceiveCompleted += msmq_ReceiveCompleted;
//start listening
msmq.BeginReceive();
}
//this will be fired everytime a message is received
static void msmq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
//get the MessageQueue that we used
MessageQueue msmq = sender as MessageQueue;
//read the message
//and process it
Message msg = msmq.EndReceive(e.AsyncResult);
//because this method is only fired once everytime
//a message is sent to the queue
//we have to start listening again
msmq.BeginReceive();
}