C# 在单个Catch语句中捕获所有WCF异常 是否可以在单个catch语句中捕获所有WCF语句i、 在下面的代码中,我有两个WCF捕获,但是我的代码对这两个捕获的反应是相同的,所以我不想重复代码 两个WCF是否都捕获、捕获所有WCF错误,或者我是否丢失了任何错误

C# 在单个Catch语句中捕获所有WCF异常 是否可以在单个catch语句中捕获所有WCF语句i、 在下面的代码中,我有两个WCF捕获,但是我的代码对这两个捕获的反应是相同的,所以我不想重复代码 两个WCF是否都捕获、捕获所有WCF错误,或者我是否丢失了任何错误,c#,wcf,wcf-security,C#,Wcf,Wcf Security,注意,我已经看到了这些列表 在WCF客户端中,您可以捕获从捕获FaultException的服务引发的异常。如果需要特殊处理(如TimeoutException或CommunicationException),还可以捕获任何其他类型的错误 下面是一个例子: proxy ServiceClient(); try { proxy = new ServiceClient(); proxy.DoSomething(); } catch (FaultException ex) { /

注意,我已经看到了这些列表


在WCF客户端中,您可以捕获从捕获FaultException的服务引发的异常。如果需要特殊处理(如TimeoutException或CommunicationException),还可以捕获任何其他类型的错误

下面是一个例子:

proxy ServiceClient();
try
{
    proxy = new ServiceClient();
    proxy.DoSomething();
}
catch (FaultException ex)
{
   // handle errors returned by WCF service
}
catch (CommunicationException ex)
{
  // handle communication errors here 
}
catch (TimeOutException ex)
{
  // handle timeouts here 
}
catch (Exception ex)
{
  // handle unaccounted for exception here 
}
finally
{
   if (proxy.State == CommunicationState.Opened)
   {
      proxy.Close();
   }
   else
   {
      proxy.Abort();
   }     
}

可能重复感谢-回答第1项,但不回答第2项这是用于WCF客户端或服务器的吗?根据答案的不同,您的方法也会有所不同。查看这篇MSDN文章:因为它在这两种情况下都会对您有所帮助。@PeterB它是为客户准备的,我已经更新以显示其他异常。CommunicationException和TimeoutException包含WCF导线级别错误。请查看System.ServiceModel命名空间中定义的异常。有很多。看见此外,在您的常规异常捕获块中,您可以记录异常类型,以发现可能需要特殊错误处理的任何常见异常。据我所知,您上面的列表捕获了所有异常(尤其是通信异常捕获了大多数异常),但我不知道,该链接也没有提到这一点,如果我能将所有故障模式列在第3项下,我不认为列出所有故障模式有什么意义,因为对于我来说,WCF的所有故障模式所采取的措施都是相同的。这实际上取决于您希望以特殊方式处理哪些异常。你是对的,几乎所有的WCF异常都是从CommunicationException派生出来的,所以除非你想对ProtocolException之类的东西采取特殊的行动,否则你不需要把你的代码和所有可能的异常混在一起。
proxy ServiceClient();
try
{
    proxy = new ServiceClient();
    proxy.DoSomething();
}
catch (FaultException ex)
{
   // handle errors returned by WCF service
}
catch (CommunicationException ex)
{
  // handle communication errors here 
}
catch (TimeOutException ex)
{
  // handle timeouts here 
}
catch (Exception ex)
{
  // handle unaccounted for exception here 
}
finally
{
   if (proxy.State == CommunicationState.Opened)
   {
      proxy.Close();
   }
   else
   {
      proxy.Abort();
   }     
}