挂起的业务流程服务实例在Resume之后重新抛出相同的意外异常

Chi*_*ari 3 biztalk

当我试图恢复Suspended(可恢复)编排实例时,我收到以下错误.

场景:请求已经过了DB2静态请求 - 响应端口,并且由于访问权限被拒绝而失败.我可以看到在管理控制台中暂停了两个实例,一个与端口相关,另一个与业务流程相关.修复凭据后,挂起的端口实例已恢复,但业务流程实例仍然处于失败状态.

Uncaught exception (see the 'inner exception' below) has suspended an instance of service 'Orchestration name'.
The service instance will remain suspended until administratively resumed or terminated. 
If resumed the instance will continue from its last persisted state and may re-throw the same unexpected exception.
InstanceId: ca927086-465d-40e8-93fe-c3a0e4c161f7
Shape name: 
ShapeId: 
Exception thrown from: segment -1, progress -1
Inner exception: An error occurred while processing the message, refer to the details section for more information 
Message ID: {96B72521-9833-48EF-BB2F-4A2E2265D697}
Instance ID: {F6FBC912-C9DC-489C-87F3-103FA1273FDC}
Error Description: The user does not have the authority to access the host resource. Check your authentication credentials or contact your system administrator. SQLSTATE: HY000, SQLCODE: -1000


Exception type: XlangSoapException
Source: Microsoft.XLANGs.BizTalk.Engine
Target Site: Void VerifyTransport(Microsoft.XLANGs.Core.Envelope, Int32, Microsoft.XLANGs.Core.Context)
The following is a stack trace that identifies the location where the exception occured
at Microsoft.BizTalk.XLANGs.BTXEngine.BTXPortBase.VerifyTransport(Envelope env, Int32 operationId, Context ctx)
at Microsoft.XLANGs.Core.Subscription.Receive(Segment s, Context ctx, Envelope& env, Boolean topOnly)
at Microsoft.XLANGs.Core.PortBase.GetMessageIdForSubscription(Subscription subscription, Segment currentSegment, Context cxt, Envelope& env, CachedObject location)
at Microsoft.XLANGs.Core.PortBase.GetMessageId(Subscription subscription, Segment currentSegment, Context cxt, Envelope& env, CachedObject location)
at (StopConditions stopOn)
at Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s, StopConditions stopCond, Exception& exp)

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
Run Code Online (Sandbox Code Playgroud)

有任何想法如何解决这个问题?

使用示例创建上述场景:

  1. 转到BizTalk samples/orchestrations/consumeWebservice文件夹,安装ConsumeWebService应用程序并将POWebservice发布到IIS.
  2. 更改POWebservice的IIS目录安全权限,删除匿名或任何其他访问权限.
  3. 现在删除消息,由于HTTP状态401:拒绝访问,您将看到挂起的消息,然后允许匿名或Windows访问POWebservice.
  4. 然后恢复暂停的实例,一个将消失但另一个(编排)不会.

sch*_*ack 5

业务流程将继续失败并出现异常,因为当它被挂起时,最后一个持久性点是收到异常.这意味着业务流程将重新启动(恢复时)并重新抛出异常.

这篇文章讨论了将编排状态持久保存到数据库的一些要点:http://blogs.msdn.com/b/sanket/archive/2006/11/12/understanding-persistence-points-in-biztalk-orchestration. ASPX

您可以在业务流程设计中对此进行一定程度的操作,正如Richard Seroter在讨论的那样,但通常您最好使用失败的消息路由,使您能够处理失败的消息,并终止失败的业务流程实例.