Pergunta

Eu tenho um projeto BizTalk 2006 R2 (usado com orientação do ESB 1) que estou chamando de orqutração para um método estático no código C#, esse método usa uma classe para carregar um arquivo de dados no corpo da mensagem xlang na parte 0 quando eu passo FilePath que não Não existe a classe interna, pegue a exceção, mas não anda -a (no método estático, há um bloco de captura e, na orqustration, há o verdadeiro manuseio da exceção)

O método estático é:


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

A classe que carrega o fluxo de arquivos é:


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

Eu chamo o método estático da orquestração e espero capturar a exceção na minha orquestração após a aula e o método o obtém.

Foi útil?

Solução

Não tenho certeza de qual é a pergunta real aqui ... Você está falando sobre como pegar a exceção na orquestração? Como fazê -lo entrar no sistema de manuseio de exceção do ESB ou o quê?

Para lidar com uma exceção em uma orquestração, você precisa usar uma forma de escopo (onde você coloca o código/formas que podem lançar a exceção) e, em seguida, adicionar um manipulador de exceção a ele (como um bloco de tentativa/captura).

Para as coisas do ESB, veja aqui: http://msdn.microsoft.com/en-us/library/ee250235(v=bts.10).aspx

Por fim, permita -me dizer: Por favor, não lide com exceções, como você já está fazendo no seu código. Você não deve pegar uma exceção apenas para jogá -lo novamente. É uma prática de programação muito ruim, prejudica o desempenho e também fará com que você perca o rastreamento original da pilha da exceção, dificultando o diagnóstico e a resolução de quaisquer problemas. Ver http://winterdom.com/2002/09/rethrowingExceptionsinc

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top