WCF 不序列化所有属性

2024-03-26

我正在使用已作为 VS2010 中的服务引用导入的 SOAP 服务。我使用服务提供的请求对象来调用其中一项服务。我遇到的问题是,并非对象的所有属性都被序列化,或者不是通过线路发送。请求对象如下所示:

var serviceRequest = new UpdateRequest{
    StoreId = request.StoreId,
    Id = request.Id,
    Status = (Status)Enum.Parse(typeof(Status), request.myStatus.ToString()),
    parameters = request.Parameters,
    validFrom = request.ValidFrom.Value,
    validFromSpecified = request.ValidFromSpecified
};

这是通过网络发送的内容。我用wireshark捕获了它

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<updateStore xmlns="http://localhost.service.com/">
    <StoreRequest>
    <StoreId>1234</StoreId>
    <validFrom>2011-11-29T00:00:00</validFrom>
    <parameters>
        <param1>true</param1>
    </parameters>
    </StoreRequest>
</updateStore>
</s:Body>
</s:Envelope>

其中两个参数 Id 和 Status 尚未发送到服务,我只是不明白为什么。正在设置值,并且 WSDL 生成的属性是公共的,并且与正在序列化的属性具有相同的序列化属性。

任何帮助,将不胜感激。

编辑 - - 使用服务参考生成的代码进行了更新

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.233")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://myservice.com/")]
public partial class StoreUpdateRequest : object,        
System.ComponentModel.INotifyPropertyChanged {
    private long StoreIdField;        
    private long IdField;        
    private bool IdFieldSpecified;        
    private Status StatusField;        
    private bool StatusFieldSpecified;        
    private long storeIdField;        
    private bool storeIdFieldSpecified;        
    private System.DateTime validFromField;        
    private bool validFromFieldSpecified;        
    private System.DateTime validToField;        
    private bool validToFieldSpecified;        
    private technicalParameters parametersField;        
    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public long StoreId {
        get {
            return this.StoreIdField;
        }
        set {
            this.StoreIdField = value;
            this.RaisePropertyChanged("StoreId");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=1)]
    public long Id {
        get {
            return this.IdField;
        }
        set {
            this.IdField = value;
            this.RaisePropertyChanged("Id");
        }
    }

问题解决了。错误是 SOAP 服务已更新,并且某些属性现在是可选的。 当字段/属性说XX在 SOAP 消息中标记为可选 WCF 创建相应的额外XX指定必须设置为的属性true当。。。的时候XX值已设置。否则,WCF 将不会序列化或发送该属性。

有多种方法可以查看属性是否设置为可选。

  • 在生成的 Reference.cs 文件中,每个可选选项都会有一个相应的 IsSpecified 属性,如下所示:private System.DateTime validFromField; private bool validFromFieldSpecified;

  • 您可以使用soapUI http://www.soapui.org/查看并测试 wsdl

  • 使用 chrome 或其他浏览器浏览到 wsdl,并查看该元素是否具有 minoccurrs 属性。如果它存在并且值为 0,那么它是可选的。像这样<xs:element minOccurs="0" name="validFrom" type="xs:dateTime"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF 不序列化所有属性 的相关文章

  • 合并多个列表

    鉴于我有一个列表列表 List
  • 从网络位置读取文件

    我在网络驱动器上共享的文件夹中有一堆文件 我正在尝试将这些文件访问到我的代码中 但它给出了一个错误 用户代码未处理 System IO DirectoryNotFoundException Fname txtwbs Text Directo
  • Request.Url.Query 和 Request.QueryString 有什么区别?

    我一直在追踪 URL 重写应用程序上的错误 该错误表现为查询字符串中某些变音符号的编码问题 基本上 问题是基本上 search aspx search he m nek 的请求被 search he c5 99m c3 a1nek 的查询字
  • WinDbg中出现“SOS版本与您正在调试的CLR版本不匹配”怎么办?

    我的某些应用程序出现问题 它是一个基于 wcf 的应用程序 在 Windows 2003 Server x86 的 IIS6 下运行 在事件日志中 我从 W3SVC WP 源 EventID 2262 收到这样的错误 ISAPI C WIN
  • Visual Studio 2013 未发现单元测试

    我在 Visual Studio 2013 中有一个简单的解决方案 它由一个 Web 项目 一个库项目和一个单元测试项目组成 当我打开解决方案并尝试运行单元测试时 Visual Studio 不会发现它们 要运行测试 我尝试转到菜单并选择
  • WCF 每个端点有不同的身份验证方法

    我有 WCF 服务 我的服务有 2 个端点 每个端点都有不同的联系人 该服务使用自定义用户名身份验证 在 的 customUserNamePasswordValidatorType 属性中定义 问题是两个端点将使用相同的身份验证方法 无论如
  • 如何将 JAVAX-WS 端点绑定更改为 SOAP 1.2?

    我正在使用发布测试 WS 实现Endpoint publish 用于在 Visual Studio 中使用 根据文档 http metro java net nonav 1 2 docs endpoint html默认的 SOAP 绑定是1
  • 序列化 .NET WCF 服务的类型时出现问题:服务 WSDL 在 XSD 中定义空类型

    我正在使用 WCF 编写一个 Web 服务 我创建了数据合约 我创建了我的服务合同 界面 我定义了方法 其参数的类型与数据契约相同 我实现了创建服务类的服务合同 我使用 svc 文件和 IIS 托管我的服务 我尝试了我的服务 寻找http
  • Ktor 如何处理空响应

    我使用 Ktor 和这样的线路myentity client get url 从 API 响应获取并反序列化我的实体 当 API 返回某些内容时它工作正常 但是一旦 API 没有任何可返回的内容并发送 HTTP 204 响应 它就会失败并显
  • 树结构的序列化/反序列化

    我试图找出保存 序列化 并稍后打开 反序列化 树结构的最佳方法 我的结构由具有不同属性的各种对象类型组成 但每个对象类型都继承自基本抽象 Node 类 每个节点都有唯一的 ID GUID 并且有一个 AddSuperNode Node nd
  • 使用 JSON.NET 反序列化一些 JSON

    我对 JSON 非常陌生 我需要解析 API 提供的一些内容 谷歌快速搜索出现了JSON NET http james newtonking com pages json net aspx 所以我现在尝试使用它将此 JSON 解析为列表对象
  • Socket.*Async 方法是线程化的吗?

    我目前正在尝试找出最小化 TCP 主服务器中使用的线程数量的最佳方法 以便最大限度地提高性能 由于我最近阅读了大量 C 5 0 的新异步功能 异步并不一定意味着多线程 这可能意味着将有限状态对象分成较小的块 然后通过交替与其他操作一起进行处
  • 使用 .NET 在 Windows 中创建弹出式“烤面包机”通知

    我正在使用 NET 并创建一个桌面应用程序 服务 当触发某些事件时 它将在桌面的一角显示通知 我不想使用常规的消息框 b c 那样会造成太大的干扰 我希望通知滑入视图 然后在几秒钟后淡出 我正在考虑一种类似于 Outlook 收到新邮件时发
  • 如何使用 MVVM-Light 和 WCF RIA 服务创建可混合项目

    我想使用 MVVM 模式构建我的业务应用程序 我选择 MVVM Light 因为它符合我的需求 在我见过的有关 MVVM Light 的每个示例中 没有人使用 WCF RIA 经典的 MIX10 示例在同一项目中使用服务 而 WCF RIA
  • 透明窗口层可点击并始终位于顶部

    这是我尝试实现的一些代码 其目的是创建一个透明 全屏 无边框 可点击且始终位于其他窗口之上的表单层 然后 您可以使用 directx 在其顶部进行绘制 否则保持透明 不起作用的部分是点击部分和 directx 渲染 当我运行它时 我基本上在
  • C# 中将一个字符串拆分为另一个字符串

    我一直在使用Split 分割字符串的方法 但这似乎仅在您按字符分割字符串时才有效 有没有办法分割一个string 另一个字符串是按参数分割的 我尝试将拆分器转换为字符数组 但没有成功 换句话说 我想分割string THExxQUICKxx
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 如何访问窗口?

    我正在尝试使用其句柄访问特定窗口 即System IntPtr value Getting the process of Visual Studio program var process Process GetProcessesByNam
  • TPL 数据流块下游如何获取源生成的数据?

    我正在使用 TPL Dataflow 处理图像 我收到处理请求 从流中读取图像 应用多次转换 然后将生成的图像写入另一个流 Request gt Stream gt Image gt Image gt Stream 为此 我使用块 Buff
  • WCF 客户端因服务中断而挂起

    我有一个相当简单的 WCF 服务 它为一堆智能客户端执行单向文件同步 我注意到 当通话期间出现网络或服务中断时 客户端将无法与服务器通信 直到整个应用程序重新启动 该服务运行于BasicHttpBinding并由 IIS6 一个 svc 页

随机推荐