我有一个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.
我的问题是:如何在不使用检查异常消息字符串的混乱构造的情况下捕获此错误?
答案 0 :(得分:1)
默认情况下,WCF将隐藏实际的异常详细信息,这与生产Web服务器不显示错误消息的方式非常相似。您需要控制引发错误的方式。
您可以在服务中捕获异常,并将其作为具有特定FaultReason或FaultCode的FaultException自行引发,或者您可以在WCF合同中包含该异常。