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