none
异常的问题,谢谢 RRS feed

  • 问题

  • 我在流程中加入了异常处理。发布成webservice可以产生异常后还是没有抛出异常,还是把流程给挂起了,没有终止。

    图截的不够大 图的下面是一个终止流程和发送。谢谢

    2008年11月21日 2:31

答案

  • 你的情况我猜测,可能是因为没有把发送消息到sql的那个逻辑发送端口的Delivery Notification属性设置为 Transmitted。
     
    检查一下
    2008年11月24日 9:42
  • 你的send_Request没有包含在Scope里面,它咋捕获异常啊~

    2008年11月25日 7:06
  • 1 因为我把流程发布成了webservice 异常只是在biztalk内部处理了,并没有返回到外部调用的程序中。有什么方法可以返  回么,谢谢。
    --要把异常返回到调用Webservice端,可以在webservices返回的消息中设计两个字段:state,表示在biztalk内是否执行成功,statedesc,如果不成功的原因,这个字段可以在biztalk的异常捕获中获得错误描述后填入。

    2 我现在用的是General Exception来补获异常我想获得异常的描述信息。有什么方法呢,谢谢。
    --“General Exception”的异常将捕获所有的.NET exceptions,包括不是从System.Exception继承的异常,如此宽松的类型以致不能给捕获到的异常对象提供任何可访问的方法和属性。更可取的方法是建一个捕获“.NET exception”类型的异常处理器,如果是要捕获调用webservices时可能产生的异常,捕获异常类型可以设置为SoapException类型(可能需要引用System.Web.Services.dll)。

    3 我想把异常描述信息返回给 外部调用的程序怎么做,谢谢
    在途中如果我最下面的异常处理中加入个发送端口 并且跟相应的webservice response关联就会报错。说没有相应的接收端口。其实我的目的就是想把错误信息返回给 外部的调用程序。用什么方法呢,谢谢。
    --参考第一个问题的回答

    4 现在的流程是内部一个原子作用域,在其外面嵌套一个长期作用域,非要这么做么,如果我只用一个长期的作用域,就补不到异常,为什么呢,谢谢。
    --long running的scope才能捕获异常,你的图形里,你试试把调用webservices的那个发送形状跟接收形状一起包含在一个L-R的scope的形状中,捕获异常类型异常SoapException试试。
    2008年12月8日 1:48
  •  

    你的贴子还真长啊.呵呵.

    第一个问题: 关于Web Service的异常返回问题你可以参考一下我的文章: BizTalk开发系列(二十六) 使用Web Service. 里面有关于怎么返回异常给Web Serfvice 请求方.

    第二个问题: 异常的类型你可以选择System.Exception. General Exception不能设置变量.

    第三个问题: 如果第一个访问成功了之后,外部调用程序不需要做任何改变.

    第四个问题: 不一定非要这么做,你可以参考一下我的文章之后,再看有没有问题,有问题的话咱们可以继续讨论.

    2008年12月8日 2:01

全部回复

  • 首先要确定一下异常是在哪产生的,如果不在scope范围内产生的,catchexception形状不会去捕获这个异常。
    然后检查一下catchexception设置的要捕获的异常类型跟产生的异常类型是不是相容的,如果不是也不会捕获异常。
    2008年11月21日 2:49
  • 对于Web Service接口的异常返回你可以参考一下这篇文章:BizTalk开发系列(二十六) 使用Web Service

    2008年11月21日 4:33
  •  

    我把整个流程除了开始的 接收和最后的发送 都放在一个事务里面,然后用System.Exception来捕获异常

    这是我执行存储过程插入一条重复的纪录。还是没有捕捉到。为什么。

    2008年11月21日 7:04
  • 噢对了,我的异常发送形状和正常流程结束的发送形状用的是 同一个端口,没有问题吧。

    2008年11月21日 7:13
  • 流程是被挂起了还是被冻结了?
    如果是挂起了,到事件日志里找到相应的错误信息,贴出来看看。
    2008年11月21日 9:42
  • 被挂起了,错误信息如下。我是故意插入一条重复的记录。想把这个异常抛出来。用的system.Exception

    HRESULT="0x80040e2f" Description="语句已终止。"
    HRESULT="0x80040e2f" Description="违反了 PRIMARY KEY 约束 'PK_RYXX_JZG'。不能在对象 'dbo.RYXX_JZG' 中插入重复键。"
    2008年11月24日 1:27
  • 你的情况我猜测,可能是因为没有把发送消息到sql的那个逻辑发送端口的Delivery Notification属性设置为 Transmitted。
     
    检查一下
    2008年11月24日 9:42
  • 你的send_Request没有包含在Scope里面,它咋捕获异常啊~

    2008年11月25日 7:06
  • 不好意思这几天,出差了。刚回来。我把逻辑发送端口的Delivery Notification属性设置为 Transmitted 依然还是捕获不到。
    2008年12月4日 6:09
  • 你楼上说的,发送形状没放在scope中,你把它移到scope里再试
    2008年12月4日 6:59
  • 楼上的方法也试过了还是不行

    2008年12月4日 7:09
  •  

    1.终止流程要用Terminate

    2.把异常对象类型改成General Exception

    2008年12月4日 9:19

  • 谢谢 kent 和 seanfish的帮助现在可以补获异常了还有些问题向请教

    1 因为我把流程发布成了webservice 异常只是在biztalk内部处理了,并没有返回到外部调用的程序中。有什么方法可以返  回么,谢谢。

    2 我现在用的是General Exception来补获异常我想获得异常的描述信息。有什么方法呢,谢谢。

    3 我想把异常描述信息返回给 外部调用的程序怎么做,谢谢
    在途中如果我最下面的异常处理中加入个发送端口 并且跟相应的webservice response关联就会报错。说没有相应的接收端口。其实我的目的就是想把错误信息返回给 外部的调用程序。用什么方法呢,谢谢。

    4 现在的流程是内部一个原子作用域,在其外面嵌套一个长期作用域,非要这么做么,如果我只用一个长期的作用域,就补不到异常,为什么呢,谢谢。

    对异常处理还是很模糊。谢谢。
    2008年12月5日 3:16
  • 对于“General Exception“是不能访问异常对象的,只能用.net 的异常类型才可以访问异常对象

    异常对象在Exception Object Name里定义 ,在这里写Message的名字,这样在异常处理模块里面就可以使用那个对象了。

    或者用一个throwexception方法把异常抛出来,这样在调用这个web service的方法里面应该就能够捕获异常了

    没做实验 你可以试一试
    2008年12月5日 7:43
  • 1 因为我把流程发布成了webservice 异常只是在biztalk内部处理了,并没有返回到外部调用的程序中。有什么方法可以返  回么,谢谢。
    --要把异常返回到调用Webservice端,可以在webservices返回的消息中设计两个字段:state,表示在biztalk内是否执行成功,statedesc,如果不成功的原因,这个字段可以在biztalk的异常捕获中获得错误描述后填入。

    2 我现在用的是General Exception来补获异常我想获得异常的描述信息。有什么方法呢,谢谢。
    --“General Exception”的异常将捕获所有的.NET exceptions,包括不是从System.Exception继承的异常,如此宽松的类型以致不能给捕获到的异常对象提供任何可访问的方法和属性。更可取的方法是建一个捕获“.NET exception”类型的异常处理器,如果是要捕获调用webservices时可能产生的异常,捕获异常类型可以设置为SoapException类型(可能需要引用System.Web.Services.dll)。

    3 我想把异常描述信息返回给 外部调用的程序怎么做,谢谢
    在途中如果我最下面的异常处理中加入个发送端口 并且跟相应的webservice response关联就会报错。说没有相应的接收端口。其实我的目的就是想把错误信息返回给 外部的调用程序。用什么方法呢,谢谢。
    --参考第一个问题的回答

    4 现在的流程是内部一个原子作用域,在其外面嵌套一个长期作用域,非要这么做么,如果我只用一个长期的作用域,就补不到异常,为什么呢,谢谢。
    --long running的scope才能捕获异常,你的图形里,你试试把调用webservices的那个发送形状跟接收形状一起包含在一个L-R的scope的形状中,捕获异常类型异常SoapException试试。
    2008年12月8日 1:48
  •  

    你的贴子还真长啊.呵呵.

    第一个问题: 关于Web Service的异常返回问题你可以参考一下我的文章: BizTalk开发系列(二十六) 使用Web Service. 里面有关于怎么返回异常给Web Serfvice 请求方.

    第二个问题: 异常的类型你可以选择System.Exception. General Exception不能设置变量.

    第三个问题: 如果第一个访问成功了之后,外部调用程序不需要做任何改变.

    第四个问题: 不一定非要这么做,你可以参考一下我的文章之后,再看有没有问题,有问题的话咱们可以继续讨论.

    2008年12月8日 2:01
  • 谢谢。
    谢谢 版主
    金剑忠  Gary Zhang SeanFish 的帮助。真的十分感谢。尤其是版主金剑忠不厌其烦的帮我这个初学者解决问题,感动ing。

    现在的做法是 只用了一个长期的作用域。然后补获异常。

    实验了一下用
    SeanFish 说的在异常处理中用ThrowException_1把异常抛出来。可是没有结果抛不出来。在我编译的时候有个警告。说没有异常处理程序 ThrowException可能不会补获。而在实际调用的时候再ThrowException_1报错了。可能是和那个编译的警告有关系。有知道的麻烦告诉下应该怎么进行异常处理程序。

    其实我想SeanFish 的方法应该像平常写程序一样在调用方用Try {} Catch{}中处理异常也是我想要的方式呵呵。但是抛不出来
    有知道的麻烦指点一下谢谢。

    SeanFish的方法不可以我现在是把异常信息赋给自定义的架构文件然后返回去。也就是版主和Gary Zhang的方法
    Gary Zhang
    的文章早就看了。因为前期不太懂所以看得云里雾里的呵呵,现在刚明白。

    总之谢谢。

    2008年12月8日 3:49