gpt4 book ai didi

windows-services - MSMQ 触发器调用 Windows 服务

转载 作者:行者123 更新时间:2023-12-04 18:14:13 31 4
gpt4 key购买 nike

当队列中有消息时,我需要我的 Windows 服务来处理队列中的消息。

我在想最好设置一个 Windows 服务,当队列中有消息时,MSMQ 应该触发,触发对 Windows 服务的调用。

有谁知道如何做到这一点?

最佳答案

如果您愿意,您可以在 Windows 服务中托管一个 WCF ServiceHost,它会在收到消息时自动提取消息。不需要连接到 MSMQ。当消息出现时,WCF 会自动将消息拉入服务。

假设您已经在写入 MSMQ 私有(private)队列“测试”。要编写正在运行的 Windows 服务,请执行以下操作,请原谅服务中方法准确性的示例:

namespace WcfService
{
public class Order
{
public int ID { get; set; }
}

[ServiceContract]
public interface IOrderService
{
[OperationContract(TransactionScopeRequired=true)]
void ProcessOrder(Order order);
}

public class OrderService : IOrderService
{
public void ProcessOrder(Order order)
{
Debug.Print("Order ID: ", order.ID);
}
}
}

namespace Client
{
public class WindowsService : IDisposable
{
private ServiceHost host = null;

// TODO: Implement static void Main to initialize service

// OnStart
public void OnStart()
{
if(host == null)
host = new ServiceHost( typeof ( OrderService ) );

host.Open();
}

public void OnStop()
{
host.Close();
}

public void Dispose()
{
// TODO: Implement Dispose() pattern properly
if(host!=null)
host.Dispose();
}
}
}

然后配置 Windows 服务从 MSMQ 读取

<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<bindings>
<netMsmqBinding>
<binding name="readFromQueueBinding" exactlyOnce="false">
<security mode="None"/>
</binding>
</netMsmqBinding>
</bindings>
<services>
<service name="WcfService.OrderService">
<endpoint address="net.msmq://localhost/private/test"
binding="netMsmqBinding"
contract="WcfService.IOrderService"
name="IOrderService_Msmq_Service"
bindingConfiguration="readFromQueueBinding"/>
</service>
</services>
</system.serviceModel>
</configuration>

关于windows-services - MSMQ 触发器调用 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041386/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com