C# 对基础数据库和实体进行微小更改后,WCF Web服务崩溃

C# 对基础数据库和实体进行微小更改后,WCF Web服务崩溃,c#,.net,wcf,entity-framework,C#,.net,Wcf,Entity Framework,这件事我已经忙了好一阵子了,我真的很感谢你的帮助 我正在用ASP.NET写一个网站。业务层分为两部分:BL服务器和BL客户端。BL服务器实际上是一个WCF服务,用于屏蔽数据访问层和数据库。WCF服务连接到DAL,DAL从DB读取数据。我们正在使用MSSQL 问题是在对DB的一个表进行了微小更改(在表“Responses”中添加了bool列)之后出现的 突然,每次我通过WCF服务请求信息时,都会出现以下异常: “用户代码未处理System.ServiceModel.CommunicationExc

这件事我已经忙了好一阵子了,我真的很感谢你的帮助

我正在用ASP.NET写一个网站。业务层分为两部分:BL服务器和BL客户端。BL服务器实际上是一个WCF服务,用于屏蔽数据访问层和数据库。WCF服务连接到DAL,DAL从DB读取数据。我们正在使用MSSQL

问题是在对DB的一个表进行了微小更改(在表“Responses”中添加了bool列)之后出现的

突然,每次我通过WCF服务请求信息时,都会出现以下异常: “用户代码未处理System.ServiceModel.CommunicationException Message=基础连接已关闭:连接意外关闭。“

这有点奇怪,因为即使在我从不同的表(例如“部门”)请求数据时,也会发生错误

我做了一些挖掘,在设置了对WCF服务的跟踪(请参阅:)之后,我发现导致WCF服务突然关闭连接的问题是缓冲区溢出。尝试将对象加载到返回缓冲区时,服务引发以下异常: “用递归结构编写一个对象在其深度较大时有局限性。考虑减少对象的深度。”

这使我在DAL方法中设置了一个断点,该方法加载“Departments”数据并检查即将通过WCF服务发送的对象

结果发现对象中有一些循环。您可以在无限循环中遍历它的元素,因为“Departments”有一些指向他的子元素

这对我来说很奇怪,所以我检查了.dbml文件,一个walla-“Departments”有一个指向它的实体列表。我发现,这可以在链接的(两个实体之间,在.dbml文件中)属性中启用/禁用。该属性称为“子属性”,启用时,会将具有外键的对象列表添加到元素中。(例如:如果A有一个FK到B。B元素将有以下成员:
private EntitySet\u A;

此时,人们可能会认为解决方案是将实体之间所有链接的所有“子属性”设置为false。但最终会出现其他例外情况,如: “System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException未由用户代码处理 Message=由于对象的当前状态,操作无效。“(由实体引发)

此外,我不想弄乱.dbml文件。我知道在对“Responses”表进行微小更改之前,一切都很好,我发现很难相信一个表中的微小更改会导致实体代码中如此混乱

很抱歉发了这么长的帖子,但这个问题让我抓狂,我想确保我提供了所有相关信息

注意:应用程序的结构是一个先决条件,我不能更改它,所以请不要讨论这个问题

提前感谢,, 夏枯草

更新: 因为我使用了源代码管理,所以我能够比较旧的“BusinessElements.designer.cs”和新的“BusinessElements.designer.cs”。我发现旧文件包含大量处理序列化的代码。例如:
[global::System.Runtime.Serialization.DataMemberAttribute(Order=1)]
,一个添加到所有属性(getter和setter)的属性

是否因为新的布尔值而删除了此代码?如何取回序列化支持代码?

已解决

“序列化模式”属性设置为“无”。 我把它设置为“单向”,现在一切都好了

如果你有同样的问题,并且觉得这很有帮助,请留言告诉我

谢谢

查看一下它可能会帮助您找出添加(或删除)特定属性的原因/时间


要检查的另一件事是您是否仍在使用同一版本的实体框架。

Ah,正如我提到的文章中提到的;-)