【问题标题】:WCF service not returning List<> System.Runtime.Serialization.SerializationExceptionWCF 服务未返回 List<> System.Runtime.Serialization.SerializationException
【发布时间】:2015-06-03 09:28:48
【问题描述】:

我调用方法LeerAlerta(),我想从一个简单的查询中返回行列表。

这是在 Linq 中进行查询的方法:

internal List<alertas> LeerAlerta()

{
    using (var db = new alertas2015())
    {
        var alertas = db.alertas.ToList();

        return alertas;
    }
}

这是操作合同:

[OperationContract]
List<alertas> LeerAlerta();

这是对象警报:

public partial class alertas
{
    public int id { get; set; }
    public int modulos_id { get; set; }
    public string proceso { get; set; }
    public string metodo { get; set; }
    public string descripcion { get; set; }
    public int estado { get; set; }
    public string receptor { get; set; }
    public System.DateTime fecha { get; set; }
    public System.DateTime fecha_aceptada { get; set; }

    public virtual modulos modulos { get; set; }
}

当我调用 LeerAlertas 时,它会停止连接并且:

System.Runtime.Serialization.SerializationException 是我从跟踪它中得到的全部。

消息:

没有SE埃斯佩拉EL TIPO 'System.Data.Entity.DynamicProxies.alertas_7895CEE569AEBE6977614A1873DB1D304F0CEC3F6B5A87E3B3C324BA933840CA' CON EL NOMBRE德contrato德DATOS 'alertas_7895CEE569AEBE6977614A1873DB1D304F0CEC3F6B5A87E3B3C324BA933840CA:http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies'。 Intente usar DataContractResolver o agregar tipos no conocidos estáticamente a la lista de tipos conocidos (por ejemplo, usando el atributo KnownTypeAttribute o agregándolos a la lista de tipos conocidos que se pasa a DataContractSerializer)。

我在序列化对象方面的经验为 0,所以我真的不知道如何解决这个问题。

【问题讨论】:

  • “它只是停止连接并且不返回任何内容” - 这永远不会发生。 Check WCF Tracing to find the actual error。我的猜测:你有lazy loading and a cyclic dependency,导致alertas.modulos.alertas.modulos等等。另见Problems with the WCF Datacontract serialization of circular reference in Entity Framework 等。
  • 服务没有连接或无法访问。这就是我在使用 LIST 时遇到的错误,如果使用普通的 bool 或 string 或 int 它可以正常工作,它可以与我拥有的其他方法一起正常工作,但 LIST 无法正常工作。
  • 再一次,这不是问题所在。事实并非如此。最有可能发生的情况是,服务在序列化响应时遇到异常,之后它会关闭连接,并且您的客户端会给出一个无法描述的错误消息。再次启用 WCF 跟踪,请参阅我之前评论中的链接。
  • 我现在已经跟踪并查看了文件,但仍然得到相同的“假定错误”,无法修复:(
  • 跟踪不会为您解决错误,它会指出错误发生的位置。

标签: c# linq wcf


【解决方案1】:

答案就像@CodeCaster 告诉我的那样,将下一件事放入 dbcontext:

Configuration.ProxyCreationEnabled = false;

【讨论】:

    【解决方案2】:

    我在为 BLAZE 顾问规则创建 WCF 服务时遇到了同样的问题,但找不到相同的原因。然后我尝试将 [Serializable()] 属性应用于我的模型中的类,这非常大。

    试一试,看看是否同样适合你。我不确定这将是确切的解决方案。但是,如果成功了,尝试总比不尝试要好。

    快乐的服务编码!!!

    【讨论】:

      【解决方案3】:

      我认为您可以尝试在类 alertas 上使用 [DataContract] 属性

      【讨论】:

      • 我认为你需要在回答之前尝试理解问题,然后研究你的答案是否真的正确。几年前就不再需要 DataContract 属性了。见stackoverflow.com/questions/4836683/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多