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

标签 c# .net wcf

我在调试我的新 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/

相关文章:

c# - 将图形对象转换为位图

c# - 为什么委托(delegate)中的 "this"指针为空?

.net - 在 VS2010 中调试时出现 UI 阻塞

wcf - 使用名字对象字符串从 Excel 调用 WCF 服务并收到 maxReceivedMessageSize 的错误 65356 已超出

c# - 嵌套的 UserControls 通信

c# - wkhtmltopdf - 在 C# 中直接将 html 代码转换为 pdf

c# - 单元测试在 Thread.Sleep 时间之前完成

javascript - 检测第三方在线广告中的音频

wcf - 读取 XML 数据时超出了最大字符串内容长度配额 (8192)

c# - 从具体化 'System.Guid' 类型到 'System.Int32' 类型的指定转换无效