C# 如何从WPF应用程序向测试NServiceBus.host服务器发送消息?

C# 如何从WPF应用程序向测试NServiceBus.host服务器发送消息?,c#,nservicebus,C#,Nservicebus,我使用以下代码从wpf应用程序启动NServisBus.host.exe文件: System.Diagnostics.Process.Start("NServiceBus.Host.exe"); 我的NServiceBus主机具有以下端点设置: public class EndpointConfig : IConfigureThisEndpoint, AsA_Server { } 我的NServiceBus主机服务器上有以下类。我需要在我的wpf应用程序中创建这个类对象(在NServic

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

System.Diagnostics.Process.Start("NServiceBus.Host.exe");
我的NServiceBus主机具有以下端点设置:

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server  
{
}
我的NServiceBus主机服务器上有以下类。我需要在我的wpf应用程序中创建这个类对象(在NServiceBus.host.exe被执行之后)

然后,我将通过其引用的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运行时)?是否有一种方法可以使用自定义初始化在我的wpf应用程序中托管我自己的NServiceBus,并且仍然正确配置我的端点?或者,是否有一种方法可以从wpf应用程序中获取总线上的句柄?
非常感谢任何示例代码。提前谢谢

使用process.start听起来有点奇怪。为什么不将主机作为windows服务运行,并让它一直运行,以便它能够接收任何传入的消息?不过,不管怎样,如果进程正在运行并加载了消息处理程序,那么它应该处理消息

当然,如果向作为主机输入队列的队列发送消息,只需发送到该队列即可

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


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

使用process.start听起来有点奇怪。为什么不将主机作为windows服务运行,并让它一直运行,以便它能够接收任何传入的消息?不过,不管怎样,如果进程正在运行并加载了消息处理程序,那么它应该处理消息

当然,如果向作为主机输入队列的队列发送消息,只需发送到该队列即可

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


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

听起来好像希望wpf应用程序访问NServiceBus.Host.exe承载端点中的确切总线实例。如果这是真的,它表明你认为只有一辆公共汽车,而事实并非如此

“总线”连接到端点,就像以太网卡连接到计算机一样。每台计算机都需要一张以太网卡,它们用以太网卡相互通信。同样,“总线”就像你的以太网卡。每个进程都有自己的进程,它们使用它们来相互发送消息

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

对于任何其他应用程序类型(Windows控制台应用程序、Windows窗体应用程序、WPF应用程序),您需要自己“托管”总线。这意味着执行整个fluent配置位,并将生成的“IBus”实例分配给公共静态变量,您可以从该应用程序的任何部分访问该变量。(在NServiceBus.Host版本中,您不必拥有对总线的公共静态引用,因为主机将其创建为单例,依赖项注入容器将其插入您创建的任何请求它的类中。)


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

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

“总线”连接到端点,就像以太网卡连接到计算机一样。每台计算机都需要一张以太网卡,它们用以太网卡相互通信。同样,“总线”就像你的以太网卡。每个进程都有自己的进程,它们使用它们来相互发送消息

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

对于任何其他应用程序类型(Windows控制台应用程序、Windows窗体应用程序、WPF应用程序),您需要自己“托管”总线。这意味着执行整个fluent配置位,并将生成的“IBus”实例分配给公共静态变量,您可以从任何部分访问该变量
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);