使用 XmlSerializer 和 WCF SOAP 添加根 xmlns

2024-03-30

我有一个由客户从第三方提供的 XML 架构文档生成的类文件。我应该能够将这个生成的类用于客户的 SOAP Web 服务,但我遇到了一些问题。

我创建了一个ServiceContract接口,这样我就可以使用 WCFChannelFactory连接到 Web 服务,如下所示:

[ServiceContract(Namespace = "http://theircompany.co.uk/theirapp/v1")]
[XmlSerializerFormat]
public interface IWebService
{
    [OperationContract]
    EPSStatus serviceNotifyDataEventSet(
        [XmlElement(Namespace = "http://www.thirdparty.org/thirdapp")] DataEventSet dataSet
    );
}

Both EPSStatus and DataEventSet在我生成的类文件中。重要的部分DataEventSet:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.42")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.thirdparty.org/thirdapp")]
[System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.thirdparty.org/thirdapp", IsNullable=false)]
public partial class DataEventSet {
    //...
}

当我现在尝试打电话时IWebService.serviceNotifyDataEventSet我得到以下 SOAP 正文(在其服务器上启用 WCF 跟踪时发现):

<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <serviceNotifyDataEventSet xmlns="http://theircompany.co.uk/theirapp/v1">
        <dataSet>
            <dataEvents xsi:type="q1:DAInt" xmlns="" xmlns:q1="http://www.thirdparty.org/thirdapp">
                <id>47245361157</id>
                <time>
                    <tick_time>141728877218</tick_time>
                    <time>2012-06-28T10:07:57.218+01:00</time>
                    <time_type>OSACBM_TIME_MIMOSA</time_type>
                </time>
                <value>42</value>
            </dataEvents>
            <id xmlns="">0</id>
            <site xmlns="">
                <category>SITE_SPECIFIC</category>
            </site>
            <time xmlns="">
                <tick_time>141728877218</tick_time>
                <time>2012-06-28T10:07:57.218+01:00</time>
                <time_type>OSACBM_TIME_MIMOSA</time_type>
            </time>
        </dataSet>
    </serviceNotifyDataEventSet>
</s:Body>

因此,我可以调用 Web 服务,并且看起来好像我的数据已正确序列化,但是在服务器端dataSet即将为零。我还从一个与以下主体一起工作的客户那里得到了跟踪:

<soap:Body>
    <serviceNotifyDataEventSet xmlns="http://theircompany.co.uk/theirapp/v1">
        <dataSet xmlns="http://www.thirdparty.org/thirdapp">
            <dataEvents xmlns:q1="http://www.thirdparty.org/thirdapp" xsi:type="q1:DAReal" xmlns="">
                <id>47245361408</id>
                <time>
                    <tick_time>141730618844</tick_time>
                    <time>2012-06-28T10:36:58.843+01:00</time>
                    <time_type>OSACBM_TIME_MIMOSA</time_type>
                </time>
                <value>12.34</value>
            </dataEvents>
            <id xmlns="">0</id>
            <site xmlns="">
                <category>SITE_SPECIFIC</category>
            </site>
            <time xmlns="">
                <tick_time>141730618843</tick_time>
                <time>2012-06-28T10:36:58.843+01:00</time>
                <time_type>OSACBM_TIME_MIMOSA</time_type>
            </time>
        </dataSet>
    </serviceNotifyDataEventSet>
</soap:Body>

我能看到的唯一区别是根命名空间设置在dataSet在工作数据包上:<dataSet xmlns="http://www.thirdparty.org/thirdapp">。在我的数据包上,根本没有指定名称空间。

我的问题是,我的分析听起来合理吗?如果是,有什么方法可以让根 xmlns 在我的设备上正确输出dataSet?


我现在已经设法使用相对简单的方法使其发挥作用。幸运的是,从 XML 模式生成的代码xsd将所有类标记为不带构造函数的部分类。我添加了自己的分部类来定义覆盖命名空间的默认构造函数,如下所示:

public partial class DataEventSet 
{
    [XmlNamespaceDeclarations]
    public XmlSerializerNamespaces _xmlns;

    /// <summary>
    /// Constructor for DataEventSet that sets up default namespaces
    /// </summary>
    public DataEventSet()
    {
        _xmlns = new XmlSerializerNamespaces();
        _xmlns.Add("", "http://www.thirdparty.org/thirdapp");
        _xmlns.Add("o", "http://www.thirdparty.org/thirdapp");
    }
}

现将其连载如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Body xmlns:s="http://www.w3.org/2003/05/soap-envelope">
  <serviceNotifyDataEventSet xmlns="http://theircompany.co.uk/theirapp/v1">
    <dataSet xmlns="http://www.thirdparty.org/thirdapp" xmlns:o="http://www.thirdparty.org/thirdapp">
      <dataEvents xsi:type="o:DABool" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <id>47245361157</id>
        <value>true</value>
      </dataEvents>
      <id xmlns="">0</id>
      <site xmlns="">
        <category>SITE_SPECIFIC</category>
      </site>
      <time xmlns="">
        <tick_time>396106152171</tick_time>
        <time>2012-07-20T13:29:12.171Z</time>
        <time_type>OSACBM_TIME_MIMOSA</time_type>
      </time>
    </dataSet>
  </serviceNotifyDataEventSet>
</s:Body>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XmlSerializer 和 WCF SOAP 添加根 xmlns 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • 如何检测表单的任何控件的变化?

    如何检测 C 中表单的任何控件的更改 由于我在一个表单上有许多控件 并且如果表单中的任何控件值发生更改 我需要禁用按钮 我正在寻找一些内置函数 事件处理程序 属性 并且不想为此创建自定义函数 不 我不知道任何时候都会触发任何事件any控制表
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • 使用 php SimpleXML 解析 XML 命名空间

    我知道这个问题已经被问过很多次了 但我无法得到任何适合我的情况的建议 我已经在网上和这里搜索并尝试了一切 但没有任何效果 我只需要使用命名空间 cap 解析此 XML 并且只需要其中的四个条目
  • jQuery 查找值然后替换 SRC

    任何人都可以看到这段代码有什么问题 它只是不起作用 我在尝试着 获取 product variants option 0 的值 搜索 preload 相关图像并 然后将 div image img src 更改为该图像 jQuery doc
  • Delphi 中的“local”指令

    我正在调试一些代码 在 SysUtils pas 中偶然发现了这一行 procedure ConvertError ResString PResStringRec local local 关键字到底有什么作用 似乎 ConvertError
  • 从 Bootstrap 3 中选择的表单元素中删除箭头

    我想删除右侧时钟图标旁边显示的向上 向下箭头 这是图像 这是 HTML div class form group div
  • MATLAB 中的嵌套 for 循环非常慢(预分配)

    我正在尝试学习 MATLAB 遇到的第一个问题是从静态相机和移动物体的图像序列中猜测背景 首先 我只想对一段时间内的像素进行平均值或中位数 所以它是我想将一个函数应用于 4 维数组的其中一行 我已将 RGB 图像加载到具有以下尺寸的 4 维
  • 解释并举例说明“get”、“delete”、“post”、“put”、“options”、“patch”、“head”方法?

    我正在写一个网络服务 有人可以解释一下上述方法并给我一些例子吗 感谢您的帮助 GET应该用来检索数据没有其他效果 但是您可以在 url 中使用查询参数来使用 get 发布数据 但这不是一个安全的方法 The POST方法用于请求源服务器接受
  • PairGrid 上的 Seaborn 相关系数

    是否有 matplotlib 或 seaborn 图可以与 g map lower 或 g map upper 一起使用来获取每个二元图显示的相关系数 如下所示 plt text 是手动映射以获得下面的示例 这是一个繁琐的过程 您可以将任何
  • 是否可以使用 HTML/CSS 进行简单计算,但无需 JavaScript 或后端?

    许多 Webview 插件 例如 Android Webview 的默认行为是禁用 JavaScript 执行 在这些情况下 是否仍然可以执行简单的计算 例如 将文本框中的两个数字相加 而不使用任何 JavaScript 代码 仅使用纯 H
  • 如何动态生成blazor的@bind-Value?

    我正在使用 Blazor 我想创建一个动态生成的表单 它是网格的一部分 数据的实体类型被传递到网格 这是表单的基础 我现在面临的问题是 bind Value 需要它才能编辑给定的实体 I use Blazor表带 https blazors
  • 如何本地化reverseGeocodeLocation的地址结果?

    我的 iPhone 应用程序应该根据用户的纬度和经度解析地址 verseGeocodeLocation 工作正常 但结果是英文的 有没有办法将结果本地化为其他语言 在苹果或其他地方找不到任何有关它的信息 我使用的代码是 CLGeocoder
  • 我熟悉 Ruby /DL,但不确定如何使用具有返回参数指针的 C 函数调用

    我在这个模块中有这个功能 require dl require dl import module LibCalendars extend DL Importer dlload cal2jd o extern int iauCal2jd in
  • 如何在 Android 中清除 Realm 中的数据库

    我想在用户按下注销按钮时清除整个数据库 并在另一个用户登录时加载新数据 我尝试了很多解决方案 例如 try Realm deleteRealm realmConfiguration catch Exception ex throw ex A
  • 具有默认方法的接口何时初始化?

    在搜索 Java 语言规范来寻找答案时这个问题 https stackoverflow com questions 23093470 java order of initialization and instantiation 230934
  • python 对二维列表进行排序

    我有一个像这样的二维列表 a 42 206 45 40 45 205 46 41 46 205 47 40 47 202 48 40 48 202 49 38 实际上这些是二维欧几里得空间中的坐标 我想以接近点按顺序排列的方式对其进行排序
  • 用Maven项目的源代码生成具有Maven目录结构的jar?

    我有一个使用 Maven 构建的 Web 应用程序 但我想用maven项目生成一个具有正确maven目录结构的JAR 我试过this http www sonatype com people 2010 01 how to create tw
  • 无法挤压 dim[1],预期维度为 1,得到 499

    我正在尝试制作一个自动编码器 但遇到了上述错误 查看 Stack Exchange 上的其他帖子并没有帮助 这是完整的错误 InvalidArgumentError Can not squeeze dim 1 expected a dime
  • 为什么在 AngularJs 中创建组件时使用方括号表示法

    当我们创建控制器 服务等组件时 AngularJs 中的方括号有什么用 我在示例中看到了 ngRoute ngFileUpload 它有什么用呢 它是角度依赖注入的定义方式 因此您可以在不破坏源代码的情况下丑化它 例如 控制器可以定义两个依
  • 如何按顺序执行jquery函数?

    正如标题所说 如何维护 控制Jquery中函数的执行顺序 我知道我们可以通过建立许多事件处理程序addEventListener 但不能保证它们的执行顺序 让我引用一下 请注意 即使处理程序按照它们的顺序触发 成立后 该订单不受标准保证 测
  • 如何使用 Jest 测试输出是随机的函数?

    如何使用 Jest 测试输出是随机的函数 像这样 import cuid from cuid const functionToTest value gt cuid a Math random b new Date toString c va
  • 使用 XmlSerializer 和 WCF SOAP 添加根 xmlns

    我有一个由客户从第三方提供的 XML 架构文档生成的类文件 我应该能够将这个生成的类用于客户的 SOAP Web 服务 但我遇到了一些问题 我创建了一个ServiceContract接口 这样我就可以使用 WCFChannelFactory