外键导致WCF套接字连接中止

时间:2012-10-29 04:49:53

标签: c# wcf sockets linq-to-sql

我有两个表,Unit和SubUnit,具有一对多关系:一个单元可以有0个或更多SubUnits。

我在WCF Windows服务中使用Linq to SQL(.dbml文件)来访问数据库。

使用Service Client,我调用任何方法来检索Units或SubUnits并且它工作正常......只要数据库中没有SubUnit(SubUnit表中有0行)。

如果有1个或更多SubUnit,则在调用相同的方法时会出现以下错误:

  • “套接字连接已中止......”
  • 内部异常“读取操作失败,请参阅内部 异常“。
  • 内部异常“套接字连接是 中止...“
  • 内部异常“强制执行现有连接 由远程主机关闭“

我已经删除了表并重新创建了它们,我已经将Unit / SubUnit表重新添加到DBML,重新安装了服务等。我以前从未遇到过这个问题。

我理解“套接字中止”错误可能是由于尝试通过WCF传递过多数据引起的,但目前数据库中有1个单元和1个SubUnit,我仍然收到此错误!

任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:0)

您需要添加[DataContract(IsReference = true)] attr。到你的实体。

答案 1 :(得分:-1)

一旦我在wcf服务中使用实体框架时在数据库上引入了外键,使用wcf客户端就会出现完全相同的错误/问题。

实体框架的服务器端调用和业务逻辑与FK的工作正常,但客户端在连接服务时遭到轰炸(返回List)。

我使用.edmx以及EF 5.x DBContext Generator。

我必须关闭所有导航属性的延迟加载。

即。在我的模型模板中,删除'虚拟'模板中的关键字:

public string AccessibilityAndVirtual(string accessibility)
    {
        return accessibility + (accessibility != "private" ? " virtual" : "");
    }

请参阅awesome post!