捕获 WCF 超时异常
Catching a WCF Timeout Exception
我有一个 WCF 服务调用一个可能很长的 运行 DB 过程。如果这导致 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.
我的问题是:我如何才能捕捉到这个错误,具体而言,又不求助于检查异常消息字符串的混乱结构?
默认情况下,WCF 将隐藏实际的异常详细信息,这与生产网络服务器不会显示错误消息的方式大致相同。您需要控制引发错误的方式。
您可以在您的服务中捕获异常并自己将其作为具有特定 FaultReason 或 FaultCode 的 FaultException 引发,或者您可以将异常包含在您的 WCF 合同中。
我有一个 WCF 服务调用一个可能很长的 运行 DB 过程。如果这导致 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.
我的问题是:我如何才能捕捉到这个错误,具体而言,又不求助于检查异常消息字符串的混乱结构?
默认情况下,WCF 将隐藏实际的异常详细信息,这与生产网络服务器不会显示错误消息的方式大致相同。您需要控制引发错误的方式。
您可以在您的服务中捕获异常并自己将其作为具有特定 FaultReason 或 FaultCode 的 FaultException 引发,或者您可以将异常包含在您的 WCF 合同中。