在对底层数据库和实体进行微小更改后,WCF Web-Service崩溃
本文关键字:崩溃 Web-Service WCF 数据库 实体 | 更新日期: 2023-09-27 18:03:51
这个问题我已经想了很久了,如果你能帮我的话,我真的很感激。
我正在用ASP.NET写一个网站。业务层分为两个部分:BL-Server和BL-Client。数据库服务器实际上是一个wcf服务,它在那里保护数据访问层和数据库。WCF-Service连接到DAL,然后从DB中读取数据。我们正在使用MSSQL
问题开始于对DB的一个表做了一个小的改变(向表"Responses"添加一个bool列)。
突然,每次我通过WCF-Service请求信息,我得到以下异常:"System.ServiceModel。CommunicationException未被用户代码处理Message=The underlying connection was closed:连接被意外关闭。"
这有点奇怪,因为即使我从另一个表(如"Departments")请求数据,也会发生错误。
我做了一些挖掘,并在设置跟踪WCF-Service(参见:http://forums.asp.net/t/1476129.aspx/1)之后,我发现WCF-Service中导致它突然关闭连接的问题是缓冲区溢出。当尝试将对象加载到返回缓冲区时,该服务抛出以下异常:"使用递归结构编写对象在深度较大时具有局限性。考虑降低物体的深度。"
这导致我在加载"Departments"数据并检查即将通过wcf服务发送的对象的DAL方法中设置了一个断点。
对象中有一些循环。你可以在无限循环中遍历它的元素,因为"Departments"有一些指向他的子元素。
这对我来说似乎很奇怪,所以我检查了.dbml文件,一个墙-"部门"有一个指向它的实体列表。我发现,这可以在链接(两个实体之间,在.dbml文件中)的属性中启用/禁用。该属性称为"Child property",当启用时,会将具有外键的对象列表添加到元素中。(例如:如果A从FK到B,则B元素将具有以下成员:private EntitySet<A> _A;
)
此外,我不想弄乱.dbml文件。我知道在对"Responses"表进行微小更改之前一切都很好,我发现很难相信一个表的微小更改会导致实体代码中的如此多混乱。
我很抱歉写了这么长一篇文章,但这个问题让我发疯了,我想确保我给出了所有相关的信息。
注意:应用程序的结构是一个先决条件,我不能改变它,所以我们不要讨论这个。
提前感谢,SummerBulb
更新:因为我使用的是源代码控制,所以我能够比较旧的"businessselements .designer.cs"和新的。我发现旧文件包含许多处理序列化的代码。例如:[global::System.Runtime.Serialization.DataMemberAttribute(Order=1)]
,添加到所有属性(getter和setter)的属性。
这段代码是否因为新的布尔值而被删除?我怎样才能得到序列化支持代码?
解决!
显示"Serialization mode"属性被设置为"none"。我把它设置为"单向",现在一切都好了。
如果你也遇到了同样的问题,并且觉得这篇文章很有帮助,请留言告诉我。
谢谢!
看一下这篇文章,它可能会帮助您了解为什么/何时添加(或删除)特定属性
另一件要检查的事情是你是否还在使用相同版本的实体框架