我有一个WCF服务在服务器上运行,还有一个Windows应用程序,它每30秒有一个计时器,通过WCF检查数据库中的一些新闻值。
一切都很顺利,但如果我的服务器(当WCF运行时)因某种原因脱机或退出,我会得到异常System.Reflection.TargetInvocationException或System.Net.WebExceptionStatus.ConnectFailure.
我想要的是,好吧,我的计时器每30秒就会检查一次,当我的服务器回来时,我想重新建立连接。实际上,唯一的方法就是关闭并打开WinForm应用程序。
如何在不关闭应用程序的情况下检查连接是否已恢复或重新连接?
public MyClass()
{
proxy = new TaskService.Service1Client();
proxy.GetTarefasCompleted += new EventHandler<GetTarefasCompletedEventArgs>
(proxy_GetTarefasCompleted);
timer = new System.Threading.Timer(Callback, null, 0, 30000);
}
private void Callback(Object state)
{
timer.Change(30000, Timeout.Infinite);
proxy.GetTarefasAsync(Environment.UserDomainName, Environment.UserName);
}
void proxy_GetTarefasCompleted(object sender, GetTarefasCompletedEventArgs e)
{
try
{
tarefas = e.Result.OrderByDescending(t => t.Id).ToList();
//code code code
}
catch (Exception ex)
{
if (ex.GetType().ToString() == "System.Net.WebExceptionStatus.ConnectFailure" ||
ex.GetType().ToString() == "System.Reflection.TargetInvocationException")
{
//treat the error
}
}
}
if (proxy.State != System.ServiceModel.CommunicationState.Opened)
{
proxy.Abort();
proxy.Open();
}
我相信这应该奏效。