.net Exception.TargetSite在使用二进制格式化程序反序列化后为空

.net Exception.TargetSite在使用二进制格式化程序反序列化后为空,.net,serialization,c#-4.0,c#-2.0,.net,Serialization,C# 4.0,C# 2.0,反序列化异常时出现问题。我完全知道,通过网络发送异常是一种不好的做法,但当前的设置要求我们的系统集成能够工作 服务器系统是.net 4 wcf服务,调用方是使用标准web引用调用.4的.net 2 服务器端只是将异常序列化并将其编码为Base64字符串 var formatter = new BinaryFormatter(); var mem = new MemoryStream(); formatter.Serialize(mem, ex);

反序列化异常时出现问题。我完全知道,通过网络发送异常是一种不好的做法,但当前的设置要求我们的系统集成能够工作

服务器系统是.net 4 wcf服务,调用方是使用标准web引用调用.4的.net 2

服务器端只是将异常序列化并将其编码为Base64字符串

      var formatter = new BinaryFormatter();
      var mem = new MemoryStream();
      formatter.Serialize(mem, ex);
      EncodedException = Convert.ToBase64String(mem.ToArray());
在接收端

      var formatter = new BinaryFormatter();
      messageChannel.ServerException = (Exception)
      formatter.Deserialize(new MemoryStream(Convert.FromBase64String(base64string)));
除了TargetSite之外,所有的都在那里

如有任何提示,我们将不胜感激

谢谢


Johan

Exception.TargetSite获取引发当前异常的方法。根据MSDN: 如果异常处理程序跨应用程序域边界处理异常,则TargetSite属性可能无法准确报告引发异常的方法的名称

这是有意义的,因为只有当远程代码/应用程序上存在Expetition的TargetSite时,才能指定返回值(而且可能不存在,因为它可以是不同的代码/应用程序)

这与序列化C#对象的反射是一样的,通过网络将其发送反序列化,并期望它在本地站点上工作,即使反射的对象在远程站点上不存在。简言之:没有类的类的反射什么都不是