如何使用 DataContractSerializer 从文件中反序列化 WCF Soap 响应消息?

2023-11-23

当我调用 Web 服务操作时,WCF 使用 DataContractSerializer 将消息反序列化到代理类:为什么我不能执行相同操作?

以下是 ActLoginResponse.xml 文件中的肥皂消息:

<SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:PlotiIntf" xmlns:ns2="urn:PlotiIntf-IPloti" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"/>
    <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <ns2:ActLoginResponse>
            <return>
                <ResultCode>0</ResultCode>
                <ResultMessage>Login et password correct.</ResultMessage>
                <Acteur>
                    <Id>IMT_706</Id>
                    <Nom>IMA PROTECT</Nom>
                    <Prenom/>
                    <nbFI>0</nbFI>
                    <FonctionActeur>TS</FonctionActeur>
                    <Timeout>30</Timeout>
                </Acteur>
                <ZneGeoList xsi:nil="true"/>
            </return>
        </ns2:ActLoginResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

相应 ActLoginResponse 类的 WCF 代理代码是:

[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
[System.ServiceModel.MessageContractAttribute(WrapperName="ActLoginResponse", WrapperNamespace="urn:PlotiIntf-IPloti", IsWrapped=true)]
public partial class ActLoginResponse {

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=0)]
    public Ploti.PlotiClient.LoginResponseType @return;

    public ActLoginResponse() {
    }

    public ActLoginResponse(Ploti.PlotiClient.LoginResponseType @return) {
        this.@return = @return;
    }
}

因此,我需要将 XML 解析为 ActLoginResponse 类型的对象实例。

这是我执行解析的方式:

        ActLoginResponse body;
        FileStream stream = new FileStream("Requests\\ActLoginResponse.xml", FileMode.Open);
        XmlReader xmlReader = XmlReader.Create(stream);

        xmlReader.MoveToContent();
        xmlReader.ReadStartElement();
        xmlReader.MoveToContent();
        xmlReader.ReadStartElement();
        xmlReader.MoveToContent();
        xmlReader.ReadStartElement();
        xmlReader.MoveToContent();

        // the the reader is on the element ActLoginResponse (that is confirmed by a Log.Debug( xmlReader.ReadOuterXml());

        // I create The DataContractSerializer: exception if nampespace is not specified
        DataContractSerializer dataContract = new `DataContractSerializer`(typeof(ActLoginResponse), "ActLoginResponse", "urn:PlotiIntf-IPloti");

        ActLoginResponse actLogin = dataContract.ReadObject(xmlReader, true);

actLogin 对象已创建,但内容 actLogin.return 始终为 NULL !我错过了什么 ?


我使用了您在其他问题中提供的 WSDL,并从中创建了一个代理类。

使用上面的 XML,我似乎在反序列化到ActLoginResponse通过以下方式:

Message m = Message.CreateMessage(XmlReader.Create("C:\\testSvc\\login.xml"), int.MaxValue, MessageVersion.Soap11);
SoapReflectionImporter importer = new SoapReflectionImporter(new SoapAttributeOverrides(), "urn:PlotiIntf-IPloti");
XmlTypeMapping mapp = importer.ImportTypeMapping(typeof(ActLoginResponse));
XmlSerializer xmlSerializer = new XmlSerializer(mapp); //typeof(T), xr
var o = (ActLoginResponse)xmlSerializer.Deserialize(m.GetReaderAtBodyContents());

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 DataContractSerializer 从文件中反序列化 WCF Soap 响应消息? 的相关文章

随机推荐

  • Azure Functions 应用程序在发布后为只读

    我有几个 Azure Functions 应用程序 c javascript 和 python 一段时间后它们都被随机设置为只读模式 奇怪的是 在这之前 这 3 个功能应用程序中只更新了其中一个 我知道这不一定是问题 但我希望能够从门户进行
  • 动态创建字段和方法

    我想为给定的类添加新字段 变量 和封装方法 例如 班级名称 Student 没有任何字段 如下所示 public class Student implements Serializable 然后在我的应用程序中创建一个实例 Student
  • HTML5 音频事件“进度”未触发

    我正在构建一个 a v html5 流媒体网络应用程序 这个问题涉及项目的音频部分 但我确信当我开始处理视频部分时我会遇到类似的情况 我的目标设备是 iPad 的 safari 浏览器 因此我必须这样做 html5 播放效果很好 但我有一个
  • 检查相交矩形的更快方法?

    除了我的 Rect 类 public class Rect public int x public int y public int w public int h public Rect int x int y int w int h th
  • 使用 JavaScript 正则表达式将数字 HTML 实体替换为其实际字符

    我正在尝试使用 JavaScript 和正则表达式将数字 HTML 实体替换为其实际的 Unicode 字符 例如 foo 39 s bar foo s bar 这是我到目前为止得到的 foo 39 s bar replace s g 1
  • 从 BaseAdapter 调用 notificationDataSetChanged 时 ListView 不会更新

    当底层数据发生变化时 我很难更新 ListActivity 我正在使用派生的 vom BaseAdapter 的自定义 列表 适配器 CustomListAdapter 来使用自定义列表元素 CustomListElement 填充 Lis
  • Erlang 是否总是在同一节点上的进程之间复制消息?

    演员消息传递语义的忠实实现意味着消息内容是从logical观点 即使对于不可变类型也是如此 消息内容的深度复制仍然是执行者模型实现的瓶颈 因此为了性能 某些实现支持零复制消息传递 尽管从程序员的角度来看它仍然是深度复制 是否实现了零拷贝消息
  • 如何等待网络流有数据可供读取?

    我的应用程序中有一个工作线程负责三件不同的事情 对其中两个作业的请求出现在我编写的队列中 当网络流上出现请求时 另一个作业就会被激活 我希望我的工作线程在没有工作要做时等待 这对于两个队列来说很容易 因为它们公开了一个 ManualRese
  • Jquery跨域问题

    我正在尝试访问另一个域中的网络服务 但它没有返回任何内容 后来我发现这是由于跨域访问造成的问题 网上查了很多文章 但没有一篇是像我这样的新手能读懂的 有人可以帮助我如何访问网络服务吗 以下是我的代码 variables for Add Co
  • 创建一个人类可读的列表,并在 ruby​​ 列表中的最后一个元素之前插入“and”

    如何获取一个列表并将其转换为逗号分隔的字符串 并在数组中的最后一个元素之前添加 and 采取类似的东西 list1 a b c 并将其变成这样 gt a b and c 我记得 ruby 有一个方法 然而我已经搜索过 但没有找到 谢谢您的帮
  • %matplotlib 内联在 iPython 和 Jupyter 控制台上不起作用

    我是第一次尝试 Jupyter 控制台 但无法获取 matplotlib inline工作的魔力 以下是示例会话的屏幕截图 The plot shows in a separate window after I run Line 6 and
  • 将彩色图喷射到灰度图

    我有一个喷射色彩图 我想知道是否有某种方法可以转换为灰度 我不能使用平均值 因为最大值和最小值变为相同的灰色 或者是否有某种方法可以转换为另一个调色板 我在 Google 上找不到转换它的函数 MATLAB 使用一种叫做rgb2ind但我想
  • .NET - 第一次有机会进行密集调试的异常侦听器?

    这可能不切实际 但是是否有可能使组件能够收到其进程中发生的所有首次机会异常的通知 我们有一些第三方 由我们承包 组件 它们除了吃例外之外什么也做不了 而业务关系的政治使整个考验变得非常痛苦 我们还意识到 我们的一些代码正在执行令人失望的操作
  • Visual Studio 2019 的 SSDT? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我找到了VS2017版本的安装程序here 但是有2019预览版的吗 SQL Server 报告服务和 SQL Server 分析服务 SSRS S
  • 是否可以绕过 MATLAB 对矢量格式文件中字体嵌入的限制?

    根据 MA TLAB 手册 当您使用以下命令保存图形时print或通过选择file save 如果您选择painters渲染器并保存为 PDF 或 EPS 矢量格式 所有字体都被替换 有没有办法绕过这个限制 每当我输出一个数字时 我是否使用
  • 比较Java中的日期字符串[重复]

    这个问题在这里已经有答案了 所以我正在使用dateString1 compareTo dateString2 它根据每个字符的 Unicode 值与字符串进行字典顺序比较 并返回一个 int 这是一个代码示例 String dateStri
  • 如何使用一个jquery在同一页面中制作多个“阅读更多”按钮?

    我想仅使用一个 jquery 在同一页面中制作多个 多读 和 少读 按钮 当我单击 阅读更多 按钮时 它会显示一些内容 并在段落末尾显示 少读 按钮 我完成了第一步 一页中有三个阅读更多按钮 一个工作正常 但另外两个不工作 请给出一些建议
  • 从没有文字内容的页面中删除自动添加的

    (使用短代码)

    我有一个由 WordPress 驱动的网站 其主页上使用静态页面 仅使用短代码来生成内容 页面通过将首页设置为静态页面并使用 the content 来获取这些短代码 在 page php 上 页面内容没有空格 只有短代码 所以看起来像这样
  • Ruby on Rails:heroku 运行 rake 资产:预编译

    请帮我理解什么heroku run rake assets precompile确实如此 自从我开始在 ruby on Rails 上工作以来 我总是会在推送到 github 和 heroku 之前运行这三个命令 bundle exec r
  • 如何使用 DataContractSerializer 从文件中反序列化 WCF Soap 响应消息?

    当我调用 Web 服务操作时 WCF 使用 DataContractSerializer 将消息反序列化到代理类 为什么我不能执行相同操作 以下是 ActLoginResponse xml 文件中的肥皂消息