Biztalk 2006 R2での例外処理
-
20-09-2019 - |
質問
BizTalk 2006 R2プロジェクト(ESBガイダンス1で使用)があります。ORCHSTRATIONからC#コードの静的メソッドに呼び出しています。このメソッドは、クラスを使用して、パート0でファイルデータをXlangメッセージ本文にロードします。存在する内部クラスは例外をキャッチしますが、それを投げかけないでください(静的方法にはキャッチブロックがあり、オーチストレーションには例外の実際の取り扱いがあります)
静的方法は次のとおりです。
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例外処理システムに移動するにはどうすればよいですか?
オーケストレーションで例外を処理するには、スコープシェイプ(例外をスローできるコード/シェイプに入れる場所)を使用して、例外ハンドラーを追加する必要があります(トライ/キャッチブロックのように)。
ESBのものについては、こちらを参照してください: http://msdn.microsoft.com/en-us/library/ee250235(v=bts.10).aspx
最後に、私に言ってください:あなたがすでにあなたのコードで行っているように例外を処理しないでください。あなたはそれをもう一度投げるためだけに例外をキャッチするべきではありません。プログラミングの練習が非常に低いため、パフォーマンスが痛く、例外の元のスタックトレースを失うことになり、問題を診断して解決することが困難になります。見る http://winterdom.com/2002/09/rethrowingexceptionsinc