C# 对基础数据库和实体进行微小更改后,WCF Web服务崩溃
这件事我已经忙了好一阵子了,我真的很感谢你的帮助 我正在用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元素将有以下成员: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
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,正如我提到的文章中提到的;-)