0

在 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)。

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

<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 之前在服务器端完成的)。 ..似乎也没有解决问题。然后我意识到在检查 Nulls/Empty 值之后,我在发送之前从列表中删除了重复项。

我删除了检查重复项的代码,现在它似乎正在工作......我不知道为什么,删除重复代码分配了一个新列表,在它被唯一地填充到列表(链接)之后。我想知道在删除重复项/重新分配新列表而不是旧列表后是否会留下空值。我将对此进行更多测试,如果我没有更多问题,我会将您的回复标记为答案,因为我相信您假设空值正在提升转移是正确的...... . 经过更多的测试,这并没有解决问题。在缩小范围的过程中。会回来汇报的。

4

1 回答 1

0

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

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

于 2012-11-12T15:35:24.813 回答