尽管WCF服务不可用,仍继续处理

时间:2013-01-18 03:00:25

标签: c# .net wcf try-catch using-statement

我有以下代码由answer posted by Jean-Michel Bezeau

提供
bool isAlive = false;
string fixedAddress = "http://localhost:8732/Design_Time_Addresses/WCFService/mex";
System.ServiceModel.Description.ServiceEndpointCollection availableBindings = System.ServiceModel.Description.MetadataResolver.Resolve(typeof(WCFService.IAlive), new EndpointAddress(fixedAddress));
ChannelFactory<WCFService.IAlive> factoryService = new ChannelFactory<WCFService.IAlive>(availableBindings[0]);
WCFService.IAlive accesService = factoryService.CreateChannel();
isAlive = accesService.IsAlive();

我希望我的程序能够继续,即使无法访问WCF服务,以便我可以通过电子邮件通知某人并将其添加到日志中。我想这样做:

bool isAlive = false;
try
{
    string fixedAddress = "http://localhost:8732/Design_Time_Addresses/WCFService/mex";
    System.ServiceModel.Description.ServiceEndpointCollection availableBindings = System.ServiceModel.Description.MetadataResolver.Resolve(typeof(WCFService.IAlive), new EndpointAddress(fixedAddress));
    ChannelFactory<WCFService.IAlive> factoryService = new ChannelFactory<WCFService.IAlive>(availableBindings[0]);
    WCFService.IAlive accesService = factoryService.CreateChannel();
    isAlive = accesService.IsAlive();
}
catch {}
finally
{
    if (isAlive)
    {
        //add success message to log
    }
    else
    {
        //add warning message to log
        //send email notification
    }
}

但是,我不喜欢捕捉所有这样的例外(我知道这是不好的做法)。什么是最好的方法呢?

我应该抓住特殊例外吗?或者,这是实施使用声明的好时机(如果可以,我可以如何帮助解决)?

1 个答案:

答案 0 :(得分:1)

异常可能是很多事情 - 它可能只是一个超时,或404错误,500错误,连接重置错误......所以可能会抛出一堆异常。在这种特殊情况下,我不会遇到全局问题。

如果第一次再次尝试失败,您可能也想考虑重试,以防它只是暂停。

或者,如果您已经在应用程序上进行了全局错误处理,那么您可能不希望吞下该异常,因此您可以使用finally块而不使用catch:

try 
{
    ....
}
finally 
{
    ....
}

但是如果它是应用无法自行处理或解决的真正错误,您只想这样做。