如何启用禁用的事件通知

我有一个场景,我使用外部通知来处理从整个海军舰队发送的文件,通常我没有问题,但就在几天前,pipe理员改变了密码,我的队列处理失败,我回滚了交易用这个C#代码:

catch(Exception){TransporterService.WriteEventToWindowsLog(AppName,“Rolling Back Transaction:”,ERROR); broker.Tran.Rollback(); 打破; }

之后我的目标队列将继续填满,但没有任何外部激活队列。 一旦事务回滚,事件通知是否被禁用? 我应该在这里做一个broker.EndDialog时,捕捉我的exception?

此外,在我的事件通知被禁用(如果这实际上是发生了什么),我该如何重新参与? 我必须放弃并重新创build吗? 预先感谢您的帮助,我非常喜欢Service Broker和它的工作,除了这个我希望很快修复的bug之外。

最有可能您的Service Broker队列由于有毒消息检测 (由于您的catch块连续执行5次)而被禁用。 解决底层问题(错误的密码)后,您应该只需要重新启用队列:

ALTER QUEUE [name] WITH STATUS = ON;

我认为事件通知本身并不需要做任何事情。

如果您想在将来快速检测到这种情况,可以为QUEUE_DISABLED事件设置事件通知,以便在队列被禁用时通知您。