【问题标题】:WCF + sending linq generated objectsWCF + 发送 linq 生成的对象
【发布时间】:2011-08-07 05:42:09
【问题描述】:

我有从我的 .dbml 生成的实体。所以有些对象具有“一对多”的关系,并且在实体中它是作为 EntitySet 生成的。

另外,我有 WCF 工作流服务应用程序,其中包含带有业务逻辑的 .xamlx。

因此,使用此 .xamlx 我尝试将之前生成的对象发送到客户端,但我发现异常“底层连接已关闭:连接已意外关闭”。

EntitySet 已添加到 KnonwTypes。 .dbml 文件中的 Serelzation 模式具有“无”值。

那么,你能告诉我如何解决这个问题吗?

【问题讨论】:

  • 更新:我将 serilixation 模式更改为单向并且它可以工作,但是有下一个问题,对于其中一个对象,一些属性没有用 DataMemberAttribute 定义并且在客户端中看不到它......我怎么能解决是吗?
  • Marc_s,如果代码是由 Visual Studio 生成的,如何添加此属性?
  • 你可以使用另一种方法来生成你的类,它支持那种东西——例如Damien Guard's Linq-to-SQL T4 templates (free)CodeSmith's PLinqO framework(需要 CodeSmith 的许可才能使用)
  • 但基本上,如果您有SerializationMode = Unidirectional,内置的 Linq-to-SQL 设计器也应该自动执行此操作。也许您需要从模型中删除该表并重新添加它,以便它会获取 [DataMember] 属性...

标签: wcf linq entityset


【解决方案1】:

是否存在内部异常?

我的猜测是导航属性引起的循环引用。

如果是这种情况,您有几个选择:

  • 从您的导航属性中删除虚拟关键字并立即加载所有内容。 注意:不确定这是否适用于 linq to sql。
  • 将您的实体映射到简单的 dto 对象。
  • 使用循环引用感知序列化程序(.net 内置的序列化程序不是)。

【讨论】:

  • 是的,存在内部异常,内部异常的堆栈跟踪:在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) 处的 System.Net.HttpWebRequest.GetResponse()
  • 我不太关心简单的对象...但是映射所有对象非常困难,而且我认为当我拥有 ADO.NET 时这样做很愚蠢...
猜你喜欢
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2011-11-12
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
相关资源
最近更新 更多