WCF サービスへの非同期呼び出しを行う必要がある Web サイトがあります。各呼び出しを try-catch ブロックでラップして、TimeoutExceptions と CommunicationExceptions を処理できるようにします。
ただし、サービスを呼び出すたびに、まったく同じ try-catch ブロックをコピーして貼り付けたいわけではありません。デリゲートを使用して try-catch ブロックを 1 回だけ書き込む方法はありますか? また、例外メッセージもキャプチャしたいと考えています。
私はそれを次のように呼びたい:
// This method returns void
TryCatchHelper(x => x.WCFMethod1(param1, param2));
// This method has a return value but no params
var returnValue = TryCatchHelper(x => x.WCFMethod2());
編集:私のコードは次のようになります:
User GetUser(int Id)
{
User returnUser = null;
try
{
// Open WCF channel, etc.
returnUser = myWCFClient.GetUser(Id);
}
catch (TimeoutException exception)
{
Log(exception.Message);
// Abort WCF factory
}
catch (CommunicationException exception)
{
Log(exception.Message);
// Abort WCF factory
}
return returnUser;
}
リポジトリに設定したすべてのメソッドで、この同じ try-catch ブロックを使用したくありません。このようなことをやってみましたが、パラメーターでエラーが発生しました。私はそれらを正しく使用していないことを知っていますが、作成したいすべての WCF メソッド呼び出しを代用できるデリゲートを定義する方法が必要です。
delegate object WCFAction(params object[] parameters);
object DoWCFAction(WCFAction action, params object[] parameters)
{
object returnValue = null;
try
{
// Open WCF channel, etc.
returnValue = action(parameters);
}
catch (TimeoutException exception)
{
Log(exception.Message);
// Abort WCF factory
}
catch (CommunicationException exception)
{
Log(exception.Message);
// Abort WCF factory
}
return returnValue;
}
void MainMethod()
{
// Compiler error
User user = DoWCFAction(GetUser, 1);
}