如何从WPF应用程序发送消息到测试NServiceBus.主机服务器



我使用以下代码从我的wpf应用程序启动NServisBus.host.exe文件:

System.Diagnostics.Process.Start("NServiceBus.Host.exe");

我为我的NServiceBus主机设置了以下端点:

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server  
{
}

我在我的NServiceBus主机服务器上有以下类。我需要在我的wpf应用程序中创建这个类对象(在NServiceBus.host.exe执行之后)。

public class OrderMessaging 
{
    public IBus Bus { get; set; }
    public void SendRouteMessageReceived(LabRoutingUpdateMessage routingUpdateMessage)
    {
        Bus.Send(new RouteMessageReceived(routingUpdateMessage));
    }
}

然后我将通过它引用的dll文件(在我的wpf应用程序中)访问这个消息类,并在我的wpf应用程序中使用以下代码向服务器发送消息:

OrderManagement.OrderMessaging routeMessageReceived = new OrderManagement.OrderMessaging();
routeMessageReceived.Bus = _bus;   //Main problem is here! Wpf app does does not have handle on NServiceBus server Bus.
routeMessageReceived.SendRouteMessageReceived(_routing);

我是否可以使用WPF应用程序向我的NServiceBus.host.exe(在使用process.start运行时)发送消息?是否有一种方法,我可以使用自定义初始化托管我自己的NServiceBus在我的wpf应用程序,仍然正确配置我的端点?或者是否有一种方法可以从我的wpf应用程序中获得总线上的句柄?任何示例代码都是非常赞赏的。提前感谢!

听起来您希望WPF应用程序访问NServiceBus.Host.exe托管端点中的确切总线实例。如果这是真的,这表明你认为只有一个总线,而事实并非如此。

"总线"之于你的端点就像以太网卡之于你的计算机。每台计算机都需要一个以太网卡,它们用它来相互通信。同样地,"总线"就像你的以太网卡。每个进程都有自己的进程,它们用自己的进程相互发送消息。

NServiceBus.Host.exe使托管端点变得简单,无论是从控制台窗口,还是让您能够将其安装为Windows服务,以便它始终运行和可用。你应该永远不需要执行Process.Start()。它还使总线的配置非常简单——几乎是自动的。你不需要做复杂的Configure.With()…流畅配置位。

对于任何其他类型的应用程序(Windows控制台应用程序,Windows窗体应用程序,WPF应用程序),你需要自己"托管"总线。这意味着要完成整个流畅的配置,并将结果"IBus"实例分配给一个公共静态变量,您可以从该应用程序的任何部分访问该变量。在NServiceBus中。主机版本,你不需要有一个公共的静态引用到总线,因为主机将它作为一个单例创建,依赖注入容器会将它插入到你创建的任何类中。

一旦你的WPF应用程序和NServiceBus.Host.exe进程都启动并初始化了各自的总线,WPF应用程序的总线就可以向NServiceBus.Host.exe的总线发送消息。

要使用process.start听起来有点奇怪。为什么不把主机作为Windows服务来运行,让它一直运行,这样它就能接收到任何进来的消息?但是,无论如何,如果进程正在运行并加载消息处理程序,它应该处理消息。

当然,如果你发送消息到作为主机输入队列的队列,就发送到那个队列。

我想你是在问你是否可以从WPF应用程序中使用主机应用程序中的总线实例,如果是这样,答案是你不想这样做。只需在WPF应用程序中创建一个总线实例。像nservicebus这样的东西的全部意义在于通过不同的端点促进可靠的进程间通信。就用它吧

您可以在WPF应用程序中设置总线,就像任何其他应用程序一样,并使用它来发送消息。如果希望WPF应用程序也处理消息,则需要为包含处理程序的程序集加载消息处理程序。

最新更新