在处理由WCF服务引发的FaultExceptions时,我们在客户端遇到不同的行为,具体取决于.NET框架的版本。
该服务定义了一个自定义错误:
[DataContract]
public class MyFault
{
[DataMember]
public int MyId { get; set; }
}
服务界面:
[ServiceContract]
public interface IMyService
{
[OperationContract]
[FaultContract(typeof(MyFault))]
MyResponse DoSomething(MyRequest request);
}
客户端处理异常:
try
{
client.DoSomething(myrequest);
}
catch (FaultException<MyFault> ex)
{
...
}
在 .NET 4.5计算机上,他会将错误识别为FaultException<MyFault>
并按预期处理。
但是,在 .NET 4计算机上,他会将错误视为FaultException
(非通用),因此永远不会达到捕获。
我们捕获了计算机上的流量,以查看通信是否存在差异。请求和响应都是相同的。我们甚至将.NET 4机器更新为.NET 4.5(不更新任何其他软件或我们的客户端软件),行为也发生了变化。
有合理的解释吗?