根据 .NET 框架的版本,在处理 WCF 服务抛出的 FaultExceptions 时,我们的客户端会遇到不同的行为。
该服务定义了一个自定义故障:
[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(没有更新任何其他软件或我们的客户端软件)并且行为发生了变化。
有什么合乎逻辑的解释吗?