DataContract类中的WCF列表(Of CustomClass)随机结果“连接意外关闭”错误

时间:2012-11-12 15:28:23

标签: wcf serialization datacontract

在DataContract()中返回List(Of CustomClass)是否存在问题?由于某种原因,我随机关闭我的WCF连接,我认为这可能是由于序列化,但我不确定如何纠正它?如果我不尝试返回List(Of CustomClass),则不会出现此问题。

为了让您更好地了解正在发生的事情,我正在尝试将有关页面的信息传递给WCF服务。像搜索爬虫一样...页面标题,内容,链接等List(Of CustomClass)是一个链接列表。 CustomClass只保存链接信息...锚点,URL,是图像等......

我试图做的是传递一个封装了页面信息的类和一个代表链接信息的List(Of CustomClass)。

类似的东西:

<OperationContract()>
Public Function Add_Page(Byval Pages as List(Of PageInfo)) as Integer 

<DataContract()>
Public Class PageInfo
    <DataMember()>
    Public Page_Title as string

    <DataMember()>
    Public Page_Links as List(Of Links)
End Class

<DataContract()>
Public Class Links
    <DataMember()>
    Public Anchor as string

    <DataMember()>
    Public URL as string
End Class

它的工作时间只有一半,但由于某种原因,它会给我一个通用的“基础连接已关闭:连接意外关闭。”没有任何跟踪信息服务器端另一半时间。我已经将MaxItemsInGraph与其他设置一起最大化,因此不应该是原因。它有时候很奇怪而不是其他的。我能摆脱这个错误的唯一方法是从上面的例子中删除List(Of Links)。

我正在重写代码以查看它是否有效通过将List(Of Links)传递给OperationContract,有点像:

<OperationContract()>
Public Function Add_Page(Byval Pages as List(Of PageInfo), Byval Page_Links as List(Of Links)) as Integer 

我有一种感觉会很好,因为我有几个其他功能以类似的方式工作没有问题。有事告诉我,我做错了,但没有正确序列化或???这是可能做的还是我的第二个例子,我将不得不使用它?感谢

编辑#1(无效)

评论中建议的DataMember(EmitDefaultValue:= True)没有修复问题所以我编写了客户端代码来仔细检查没有发送Nulls / Empty值(这是在服务器端完成之前保存到DB)......似乎也没有解决问题。然后我意识到我在发送之前从List中删除了重复项,之后我检查了Nulls / Empty值。

我删除了检查重复项的代码,现在它似乎正在工作......我不知道为什么,删除Dupe代码分配了一个新列表,在它被唯一填充到List(Of Links)之后。我想知道在删除Duplicates /重新分配新列表之后是​​否有一些离开Nulled值的方法。我要再测试一下这个问题,如果我没有任何问题,我会将你的回答标记为答案,因为我认为你在假设一个无效的值正在推动转移时是正确的。 ...经过更多测试,这并没有解决问题。在缩小事物的过程中。将报告回来。

1 个答案:

答案 0 :(得分:0)

我也收到了这个错误。我相信它与我返回一个空值并返回记录列表有关。我在我的DataMember属性中将其更改为:[DataMember(EmitDefaultValue = true)]但我也检查了空值,因为我不希望它们在我的查询中返回。您可以,但查看正在返回的数据,如果其中包含空值,请检查以不发送这些记录并查看是否有效。

编辑:我的括号是因为我在c#中这样做了所以你只需将它转换为VB。