Обработка исключений в biztalk 2006 R2

У меня есть проект Biztalk 2006 R2 (используемый с ESB Guidance 1). Я вызываю из оркстрации статический метод в коде C #, этот метод использует класс для загрузки данных файла в тело сообщения xlang в части 0 Когда я передаю путь к файлу, который не не существует внутреннего класса, который улавливает исключение, но не вызывает его (в статическом методе есть блок catch, а в оркестровке есть реальная обработка исключения)

Статический метод:


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;
                }
            }
        }

Я вызываю статический метод из оркестровки и ожидаю поймать исключение в моей оркестровке после того, как класс и метод его получит.


person IB.    schedule 16.03.2010    source источник


Ответы (1)


Я не уверен, в чем заключается реальный вопрос ... вы говорите о том, как отловить исключение в оркестровке? Как заставить его войти в систему обработки исключений ESB или что?

Чтобы обработать исключение в оркестровке, вам нужно использовать фигуру Scope (где вы помещаете код / ​​фигуры, которые могут генерировать исключение), а затем добавить к нему обработчик исключения (вроде как блок try / catch).

Информацию о ESB см. Здесь: http://msdn.microsoft.com/en-US/library/ee250235(v=BTS.10).aspx

Наконец, позвольте мне сказать: пожалуйста, НЕ обрабатывайте исключения, как вы это уже делаете в своем коде. Вы НЕ должны ловить исключение только для того, чтобы выбросить его снова. Это очень плохая практика программирования, она снижает производительность, а также приводит к потере исходной трассировки стека исключения, что затрудняет диагностику и решение любых проблем. См. http://winterdom.com/2002/09/rethrowingexceptionsinc.

person tomasr    schedule 16.03.2010
comment
Спасибо за ответ. Я перехватил исключение, чтобы увидеть его при отладке, поэтому вы видите этот код. проблема в том, что исключение возникает в классе (вторая ссылка на код), и orch не улавливает его (после того, как метод должен его уловить), но если я выдаю ошибку в методе, тогда orch поймает ее и обработает, я использую ascope в orchstration и построить обработку исключений по книге (эта система уже находится в производстве и пока работает отлично, за исключением этой ошибки) Спасибо - person IB.; 16.03.2010