2010-03-18 58 views
1

更新: 好吧,经过了我没有将MSDTC设置为群集资源(doh!)的事实后,我能够运行我的程序,并且都显示正常,但是我无法成功发送消息到它。挖掘之后,我发现虽然专用队列是在群集的一个节点上创建的,但它们不在另一个节点上(我从命令提示符运行NServiceBus.Host.exe),因此对于使用群集的应用程序不可见名称。我尝试从NServiceBus.Host.exe中创建一个通用应用程序并将其添加到群集组,但这只是将群集组关闭。我的问题仍然是:是否有人在集群环境中成功运行NServiceBus?是否有人将NServiceBus安装到Microsoft群集服务器上?


我想安装到群集win2k3主机NServiceBus。提供的配置实用程序(runner.exe)会抛出一些我没有发现的错误,现在它可以正常运行。当我运行NServiceBus.Host.exe我得到这个错误反复:

System.Transactions.TransactionAbortedException:事务已中止。 ---> System.Transactions.TransactionManagerCommunicationException:与底层事务管理器的通信失败。 ---> System.Runtime.InteropServices.COMException(0x8004D01B):事务管理器不可用。在System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(字符串节点名称,的Guid resourceManagerIdentifier,IntPtr的managedIdentifier,布尔& nodeNameMatches,UInt32的& whereaboutsSize,CoTaskMemHandle & whereaboutsBuffer,IResourceManagerShim & resourceManagerShim) 在System.Transactions的 :(0x8004D01B从HRESULT异常)。 Oletx.DtcTransactionManager.Initialize() ---在System.Transactions.Oletx.OletxTransactionManager.ProxyException(收到COMException收到COMException) 内部异常堆栈跟踪--- 结束在System.Transactions.Oletx.DtcTransactionManager.Initialize() 在System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory() at System.Transactions.Oletx.OletxTransactionManager.CreateTransaction(TransactionOptions属性) at System.Transactions.TransactionStatePromoted.EnterState(InternalTransaction tx) ---内部异常堆栈跟踪结束--- at System.Transactions.TransactionStateAborted.CheckForFinishedTransaction (InternalTransaction TX) 在System.Transactions.EnlistableStates.Promote(InternalTransaction TX) 在System.Transactions.Transaction.Promote() 在System.Transactions.TransactionInterop.ConvertToOletxTransaction(事务的事务) 在System.Transactions.TransactionInterop.GetDtcTransaction (Transaction transaction) at System.Messaging.MessageQueue.StaleSafeReceiveMessage(UInt32 timeout,Int32 action,MQPROPS properties,N ativeOverlapped *重叠,ReceiveCallback receiveCallback,CursorHandle cursorHandle,IntPtr的交易) 在System.Messaging.MessageQueue.ReceiveCurrent(时间跨度超时,的Int32动作,CursorHandle光标,MessagePropertyFilter滤波器,MessageQueueTransaction internalTransaction,MessageQueueTransactionType TRANSACTIONTYPE) 在System.Messaging.MessageQueue.Receive (TimeSpan超时,MessageQueueTransactionType事务类型) at d:\ BuildAgent-02 \ work \中的NServiceBus.Unicast.Transport.Msmq.MsmqTransport.ReceiveMessageFromQueueAfterPeekWasSuccessful()\ 672d81652eaca4e1 \ src \ impl \ unicast \ NServiceBus.Unicast.Msmq \ MsmqTransport.cs: 551行

有没有人成功地将NServiceBus放到集群服务器上,如果是的话,如何你有没有得到它的工作?

回答

3

好的,所以我终于把它作为一个通用应用程序来工作。我发现的陷阱是:

  1. 您需要在.NET Framework 功能或应用程序服务器角色 添加到成员服务器
  2. 您需要同时添加MSDTC和MSMQ资源 到群集( MSMQ需要 你有MSDTC)
  3. 增加对 NServiceBus.Host.exe通用应用程序后,您将需要 去和修改属性的通用应用程序的 检查 “使用网络名称对于计算机 名称“框,以便NServiceBus将 指向集群名称,以便使用MSMQ 而不是当前正在运行它的成员服务器 。
1

好吧,它有助于在群集上设置MSDTC资源,一旦你拥有MSMQ资源和MSMQ资源,那么一切正常,几乎可以看到问题的更新。

+0

我发现的另一个问题是,在为群集组设置通用应用程序之后,您需要进入并更改属性以检查“使用网络名称作为计算机名称”,否则NServiceBus将尝试运行在本地使用其中一个节点的名称。 – BlackICE 2010-03-23 18:52:18

相关问题