我们有一个长期运行的异步 WCF 服务操作,它从我们服务中的不同组件中获取日志文件。现在,一切正常,但我们还想实现一个“很高兴”的功能。
如果异步服务花费的时间太长,WCF 将超时,但如果我们的某个组件行为不端,则发出其日志文件的时间可能比我们为超时期限分配的时间长。如果发生这种情况,如果客户端应用程序告诉用户获取日志文件需要一段时间并询问用户是否要继续等待,那就太好了。如果用户说是,是否有某种方法可以在超时时的状态下恢复操作并重置超时计时器?
这个伪代码显示了我们的想法:
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();
}
}