1

Biztalk 2006 R2プロジェクト(ESBガイダンス1で使用)があります。オーケストレーションからc#コードの静的メソッドを呼び出しています。このメソッドは、クラスを使用して、パート0でファイルデータをxlangメッセージ本文にロードします。内部クラスが存在しない場合は例外をキャッチしますが、スローしないでください(静的メソッドには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;
                }
            }
        }

オーケストレーションから静的メソッドを呼び出し、クラスとメソッドがそれを取得した後、オーケストレーションで例外をキャッチすることを期待しています。

4

1 に答える 1

1

ここでの実際の質問が何であるかわかりません....オーケストレーションで例外をキャッチする方法について話しているのですか?ESB例外処理システムに組み込む方法は?

オーケストレーションで例外を処理するには、スコープシェイプ(例外をスローできるコード/シェイプを配置する場所)を使用してから、それに例外ハンドラー(try / catchブロックのようなもの)を追加する必要があります。

ESBに関するものについては、ここを参照してください:http: //msdn.microsoft.com/en-US/library/ee250235 (v=BTS.10).aspx

最後に、私に言わせてください。すでにコードで行っているように、例外を処理しないでください。もう一度スローするためだけに例外をキャッチするべきではありません。これは非常に貧弱なプログラミング手法であり、パフォーマンスを低下させ、例外の元のスタックトレースを失う原因にもなり、問題の診断と解決が困難になります。http://winterdom.com/2002/09/rethrowingexceptionsincを参照してください

于 2010-03-16T12:34:13.403 に答える