gpt4 book ai didi

c# - 并非所有属性都在 WCF 调用中发送或接收

转载 作者:太空宇宙 更新时间:2023-11-03 22:08:13 25 4
gpt4 key购买 nike

我在调试我的新 WCF 服务时遇到了令人沮丧的事情。问题出在某个 DataContract 上。似乎在某个属性发生某些事情之后在服务器端进行反序列化,其余的都没有设置。我查看了从元数据生成的生成的 xsd 模式,一切似乎都正常。我使用 Fiddler 来监听发送的 soap 数据包并让客户端所有数据都存在。我什至将 Order 参数设置为 DataContract 属性,以查看我是否可以看到模式但从未看到。我还将 DataMember 名称与消息中的名称进行了比较,它们都匹配。我发现的唯一模式是:

这里是有问题的 DataContract 对象的 xsd 定义:

<xs:complexType name="Attachment">
<xs:sequence>
<xs:element minOccurs="0" name="dateTime" type="xs:dateTime"/>
<xs:element minOccurs="0" name="description" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="fileName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="guid" type="ser:guid"/>
<xs:element minOccurs="0" name="obsDate" type="xs:dateTime"/>
<xs:element minOccurs="0" name="operation" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="originalFileName" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="title" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="type" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>

这是 DataContract 对象:

[DataContract(Namespace="http://www.myns.com")]
public class Attachment
{
public enum AttachmentSortOrder { Date, FileType }

[DataMember]
public Guid guid;
[DataMember]
public DateTime dateTime;
[DataMember]
public string operation;
[DataMember]
public DateTime obsDate;
[DataMember]
public string originalFileName;
[DataMember]
public string fileName;
[DataMember]
public string title;
[DataMember]
public string type;
[DataMember]
public string description;
}

似乎由于某种原因没有设置 obsDate 之后的所有属性。

为什么?

最佳答案

查看 SOAP 并了解客户端是否为 .NET 会有所帮助。

我曾在使用非 .NET 客户端时看到类似的情况。你的 xsd 指定了一个 sequence - 使用 Order 属性或默认为字母顺序来确定。一些客户似乎将其视为 all元素;他们似乎认为“它们都是相同的 XML”(参见 In XML, is order important?)。

总而言之,检查 SOAP 元素的顺序是否与您的 XSD 匹配。

关于c# - 并非所有属性都在 WCF 调用中发送或接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com