biztalk 2006 R2中的异常处理

biztalk 2006 R2中的异常处理,biztalk,esb,biztalk2006r2,Biztalk,Esb,Biztalk2006r2,我有一个Biztalk 2006 R2项目(与ESB指南1一起使用) 我从orchstration调用c#代码中的一个静态方法,该方法使用一个类将文件数据加载到第0部分的xlang消息体中 当我传递不存在的filepath时,类捕获异常但不抛出异常(在静态方法中有一个catch块,在orchstration中有异常的实际处理) 静态方法是: public static XLANGMessage LoadFileIntoMessage(XLANGMessage message, string f

我有一个Biztalk 2006 R2项目(与ESB指南1一起使用) 我从orchstration调用c#代码中的一个静态方法,该方法使用一个类将文件数据加载到第0部分的xlang消息体中 当我传递不存在的filepath时,类捕获异常但不抛出异常(在静态方法中有一个catch块,在orchstration中有异常的实际处理)

静态方法是:


public static XLANGMessage LoadFileIntoMessage(XLANGMessage message, string filePath,Encoding encoding)
        {
            try
            {
                IStreamFactory sf = new FileStreamFactory(filePath,encoding);

                message[0].LoadFrom(sf);
                return message;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
加载文件流的类是:


private class FileStreamFactory : IStreamFactory
        {
            string _fname;
            Encoding _encoding;

            public FileStreamFactory(string fname,Encoding encoding)
            {
                _fname = fname;
                _encoding = encoding;
            }

            public Stream CreateStream()
            {
                try
                {
                    StreamReader sr;
                    sr = new StreamReader
                    (
                        _fname,
                        _encoding
                    );

                    return sr.BaseStream;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }

我从编排中调用静态方法,希望在类和方法获得异常后捕获编排中的异常。

我不确定这里的实际问题是什么。。。。您是在谈论如何捕获编排中的异常吗?如何使其进入ESB异常处理系统或什么

要处理业务流程中的异常,您需要使用范围形状(在其中放入可以引发异常的代码/形状),然后向其添加异常处理程序(有点像try/catch块)

有关ESB的内容,请参见此处:


最后,请允许我说:请不要像在代码中那样处理异常。您不应该捕获异常而只是再次抛出它。这是一种非常糟糕的编程实践,它会影响性能,还会导致您丢失异常的原始堆栈跟踪,从而使诊断和解决任何问题变得更加困难。请看

我不确定这里的实际问题是什么。。。。您是在谈论如何捕获编排中的异常吗?如何使其进入ESB异常处理系统或什么

要处理业务流程中的异常,您需要使用范围形状(在其中放入可以引发异常的代码/形状),然后向其添加异常处理程序(有点像try/catch块)

有关ESB的内容,请参见此处:


最后,请允许我说:请不要像在代码中那样处理异常。您不应该捕获异常而只是再次抛出它。这是一种非常糟糕的编程实践,它会影响性能,还会导致您丢失异常的原始堆栈跟踪,从而使诊断和解决任何问题变得更加困难。请参见

感谢您的回复我捕获了异常,以便在调试中看到它,这就是您看到此代码的原因。问题是异常发生在类(第二个代码链接)中,orch没有捕捉到它(在方法应该捕捉到它之后),但是如果我在方法中抛出一个错误,那么orch会捕捉到它并处理它,我会在orchstration中使用ascope,并按书构建exception处理(该系统已投入生产,除此错误外工作正常)感谢您的回复我捕获了异常以便在调试中看到它,这就是为什么您会看到此代码。问题是异常发生在类(第二个代码链接)中,orch没有捕获它(在方法应捕获它之后)但是如果我在方法中抛出一个错误,那么orch会捕获并处理它,我会在orchstration中使用ascope,并按照书构建Exception处理(该系统已经投入生产,并且工作完美,除了这个错误),谢谢