biztalk 2006 R2中的异常处理

时间:2010-03-16 09:45:10

标签: biztalk esb biztalk2006r2

我有一个Biztalk 2006 R2项目(与ESB指南1一起使用) 我从orchstration调用c#代码中的静态方法,这个方法使用一个类将文件数据加载到第0部分的xlang消息体中 当我传递不存在的文件路径时,内部类会捕获异常,但不要将其抛出(在静态方法中有一个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;
                }
            }
        }

我从业务流程中调用静态方法,并期望在类和方法获取后在我的业务流程中捕获异常。

1 个答案:

答案 0 :(得分:1)

我不确定这里的实际问题是什么....你在谈论如何在业务流程中捕获异常吗?如何让它进入ESB异常处理系统或什么?

要在业务流程中处理异常,您需要使用Scope形状(放置可以抛出异常的代码/形状),然后为其添加一个Exception处理程序(有点像try / catch块)。

有关ESB的内容,请参阅此处:http://msdn.microsoft.com/en-US/library/ee250235(v=BTS.10).aspx

最后,请允许我说:请不要像处理代码那样处理异常。你不应该只是再次抛出一个例外。这是一个非常糟糕的编程实践,它会损害性能,并且还会导致您丢失异常的原始堆栈跟踪,从而使诊断和解决任何问题变得更加困难。见http://winterdom.com/2002/09/rethrowingexceptionsinc