捕获WCF超时异常

时间:2015-03-19 16:50:32

标签: c# wcf

我有一个WCF服务,可以调用可能长时间运行的数据库过程。如果这导致WCF超时,我想在客户端中正常处理它。

以下是我正在使用调用WCF服务的代码:

async Task<int> RunWCFServiceCall()
{
    try
    {
        int returnVal = await Task.Run<int>(() => CallService());

        return returnVal;
    }
    catch (FaultException ex)
    {
        if (ex.InnerException.GetType().Equals(typeof(TimeoutException)))
        {
            return 0;
        }

上面的代码将异常捕获为FaultException,但未通过内部异常检查。原因是InnerException为空;但是,异常消息是:

Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

我的问题是:如何在不使用检查异常消息字符串的混乱构造的情况下捕获此错误?

1 个答案:

答案 0 :(得分:1)

默认情况下,WCF将隐藏实际的异常详细信息,这与生产Web服务器不显示错误消息的方式非常相似。您需要控制引发错误的方式。

您可以在服务中捕获异常,并将其作为具有特定FaultReason或FaultCode的FaultException自行引发,或者您可以在WCF合同中包含该异常。