none
如何订阅通过流程的直接端口发布时路由失败的消息 RRS feed

  • 问题

  • Hi

       我在流程里使用直接端口将消息发布到Messagebox。但如果此消息没有相关的订阅者的话BizTalk引擎会报发布失败的错误,并且会挂起该消息。如何通过订阅的方式将此错误消息订阅到?

      

    1. 在事件日志里可以看到如下信息:

            . . . . . .

            Inner exception: Exception occurred when persisting state to the database. 

             . . . . . .

            A batch item failed persistence Item-ID e8fae691-702d-48c6-b131-6461e8adcc03 OperationType MAIO_CommitBatch Status -1061151998 ErrorInfo The published message could not be routed because no subscribers were found. .

     2. 在BizTalk的管理控制台有如下信息

         ->Group Hub

                   we can see there have two suspented items one is Resumble, the other is Non-resumable

                 -> Resumable

                   There have one suspented message, the service class is orchestration. Service Name is the Publish Orchestration Name.

                    Message Dialogue

                     In the Context there have  six propries has beed promoted: InboundTransportLocation, LastInterchangeMessage, ReceivePortID, ReceivePortName. The Message Ports have the message source data.

     

                ->Non-resumable

                      There have one suspented, the service class is Routing failure report, Service Name is Routing Failure Report for "...The Publish Orchestration Name..".

                    Message Dialogue 

                       In the Context there have  two propries has beed promoted: MessageType, Operation. And the message parts is null.      

    2008年12月3日 10:21

答案

  • 不是很明白, 生成的错误报告的消息由于其升级的属性也没有什么特别的属性.所以也无法被异常处理订阅. 那么就无法使用外部DLL去做错误处理的.

       也就是说通过直接端口发送产生的错误信息,是无法通过订阅的方式订阅到的.对于异常处理程序来说这个错误是无法被捕获到的. 是不是就只能通过控制台的方式进行了?

    • 已标记为答案 GaryZhang 2009年5月11日 4:57
    2008年12月5日 11:47

全部回复

  • 已经出错的应该不能被重新订阅,,但是可以通过Microsoft.BizTalk.Operations里的方法去获取,然后再做处理...

    2008年12月4日 2:01
  • 现在是消息出错后,消息的上下文不会有相关的错误信息,但会生成另一个错误报告消息。通过订阅的方式是无法获取的。有没有相关的理论支持对于通过直接端口发布失败的消息?该怎么处理?

    2008年12月4日 4:13
  • 发布的消息没有订阅者的情况不算失败的消息,无法用路由失败的消息的方法订阅消息中包含的失败的属性。
     
    biztalk里好像也没有机制再把这样的消息路由一次,不过 "但会生成另一个错误报告消息",这个消息应该可以被订阅,而且这个消息里也应该包含有订阅的那个消息的id,是不是可以通过外部dll使用Microsoft.BizTalk.Operations里的方法根据消息id获得消息内容,处理完毕后,同样使用Microsoft.BizTalk.Operations里的方法终止被挂起的原来的消息。
    2008年12月4日 4:25
  • 不是很明白, 生成的错误报告的消息由于其升级的属性也没有什么特别的属性.所以也无法被异常处理订阅. 那么就无法使用外部DLL去做错误处理的.

       也就是说通过直接端口发送产生的错误信息,是无法通过订阅的方式订阅到的.对于异常处理程序来说这个错误是无法被捕获到的. 是不是就只能通过控制台的方式进行了?

    • 已标记为答案 GaryZhang 2009年5月11日 4:57
    2008年12月5日 11:47