サービス内のさまざまなコンポーネントからログファイルを取得する、長時間実行される非同期WCFサービス操作があります。現在、すべてが正常に機能していますが、実装したい「あると便利な」機能がもう1つあります。
WCFは、非同期サービスに時間がかかりすぎるとタイムアウトになりますが、コンポーネントの1つが誤動作している場合、タイムアウト期間に割り当てるよりもログファイルの提供に時間がかかる可能性があります。これが発生した場合、クライアントアプリケーションがユーザーにログファイルの取得に時間がかかることを通知し、ユーザーが待機を続けるかどうかを尋ねると便利です。ユーザーが「はい」と答えた場合、タイムアウトしたときの状態で操作を再開し、タイムアウトタイマーをリセットする方法はありますか?
この擬似コードは、私たちが念頭に置いていることを示しています。
public void GetServiceLogFiles(Action<Object> callback)
{
try
{
var gotLogFilesDelegate = (result) =>
{ var answer = WcfService.EndGetLogFiles(result);
callback(answer); };
WcfService.BeginGetLogFiles(gotLogFilesDelegate, null);
}
catch(TimeoutException)
{
var dialog = new Dialog("The service is taking a while to get the log files. Would you like to keep on waiting for it to finish?");
if(dialog.response = Dialog.YES)
Magic_happens_here_and_lets_the_Wcf_Service_continue_working_on_Get_Log_Files();
}
}