C# 群集上的Msmq,如何知道服务是否在群集下?

C# 群集上的Msmq,如何知道服务是否在群集下?,c#,windows-services,msmq,cluster-computing,C#,Windows Services,Msmq,Cluster Computing,我们开发的产品具有扩展和故障切换功能。 服务器通过wcf通过msmq相互通信为了持久性,我们在配置集群下的窗口服务以使用集群式msmq时遇到了麻烦。 答案是在服务启动中配置环境.SetEnvironmentVariable,如下所示环境.SetEnvironmentVariable(_CLUSTER\u NETWORK\u NAME\u,“CLUSTER”)之后,群集msmq上的wcf工作,但问题是要知道服务何时在群集下,何时不在群集下。 有办法知道吗 更新 在咨询Microsoft后,我们得出

我们开发的产品具有扩展和故障切换功能。
服务器通过
wcf
通过
msmq
相互通信为了持久性,我们在配置集群下的窗口服务以使用集群式msmq时遇到了麻烦。
答案是在服务启动中配置
环境.SetEnvironmentVariable
,如下所示
环境.SetEnvironmentVariable(_CLUSTER\u NETWORK\u NAME\u,“CLUSTER”)之后,群集msmq上的wcf工作,但问题是要知道服务何时在群集下,何时不在群集下。
有办法知道吗

更新

在咨询Microsoft后,我们得出结论,使用MSMQ的群集的体系结构是错误的,MSMQ是一种服务而不是服务器,因此,作为队列主服务器的每台服务器都需要将MSMQ配置为其自己组中的依赖项。msmq将处理节点和服务器客户端之间的消息

我们将WCF(netMsmqBinding)与群集MSMQ结合使用。 在故障转移群集管理器(2008)或群集管理器(2003)中添加MSMQ服务时

你有一个网络名,比如说“MyNetworkName”,它有一个IP。 MSMQ是该networkname上的accessibel-因此配置中的队列定义应以MyNetworkName\private开头。。。或者,如果您的WCF服务也作为群集中的Windows服务运行,您可以选择资源选项“使用网络名称作为comutername”,并可以在配置中使用“\private…”—“备注:Windows服务应在与MSMQ相同的资源组中运行”

编辑:如果我很理解您的问题,当您在群集服务上选中“使用networkname…”复选框时,相同的代码将使用群集msmsq,但如果您不在群集上运行或不在资源组中,则将使用本地msmq

确保MSMQ以目录服务集成模式安装

要组织群集MSMQ,可以使用microsoft的mmcv.exe工具(常规的mmc.exe工具是不够的)

您可以在此处阅读有关mmcv.exe的信息:

我们将WCF(netMsmqBinding)与群集MSMQ结合使用。 在故障转移群集管理器(2008)或群集管理器(2003)中添加MSMQ服务时

你有一个网络名,比如说“MyNetworkName”,它有一个IP。 MSMQ是该networkname上的accessibel-因此配置中的队列定义应以MyNetworkName\private开头。。。或者,如果您的WCF服务也作为群集中的Windows服务运行,您可以选择资源选项“使用网络名称作为comutername”,并可以在配置中使用“\private…”—“备注:Windows服务应在与MSMQ相同的资源组中运行”

编辑:如果我很理解您的问题,当您在群集服务上选中“使用networkname…”复选框时,相同的代码将使用群集msmsq,但如果您不在群集上运行或不在资源组中,则将使用本地msmq

确保MSMQ以目录服务集成模式安装

要组织群集MSMQ,可以使用microsoft的mmcv.exe工具(常规的mmc.exe工具是不够的)

您可以在此处阅读有关mmcv.exe的信息: