【发布时间】: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 跟踪,请参阅我之前评论中的链接。
-
我现在已经跟踪并查看了文件,但仍然得到相同的“假定错误”,无法修复:(
-
跟踪不会为您解决错误,它会指出错误发生的位置。