在 .NET 中使用 RPC/编码的 SOAP Web 服务时出错

2024-04-04

我在调用 Web 服务方法时收到以下错误。

无法将 System.Xml.XmlNode[] 类型的对象分配给 System.String 类型的对象。

Web 服务是 PHP 服务。我使用此处定义的 wsdl 文档中的 wsdl.exe 创建了我的代理类 -http://webservice.intelecast.com.au/traffic/PublicSoap/server.php?wsdl http://webservice.intelecast.com.au/traffic/PublicSoap/server.php?wsdl

下面是我调用的代理客户端方法。

[System.Web.Services.Protocols.SoapRpcMethodAttribute("http://webservice.intelecast.com.au/traffic/PublicSoap/server.php#getAllTraffic", RequestNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php", ResponseNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php")]
 [return: System.Xml.Serialization.SoapElementAttribute("return")]
 public TmcInfo[] getAllTmcTraffic(string[] States, int[] EventCodes) {
     object[] results = this.Invoke("getAllTmcTraffic", new object[] { //Error here
                 States,
                 EventCodes});

代理类似乎无法处理 wsdl 中定义的复杂类型/数组...我现在不确定如何继续,在网络上任何地方都找不到解决方案。

以下是我收到的 SOAP 响应。这一切似乎都是有效的。

<?xml version="1.0" encoding="iso-8859-1"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
       xmlns:tns="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php">
    <SOAP-ENV:Body>
        <ns1:getAllTrafficResponse 
            xmlns:ns1="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php">
            <return xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:TrafficInfo[2]">
                <item xsi:type="tns:TrafficInfo">
                    <id xsi:type="xsd:string">1245632068110</id>
                    <entryDate xsi:type="xsd:datetime">22/06/2009 10:54:28</entryDate>
                    <direction xsi:type="xsd:int">0</direction>
                    <extent xsi:type="xsd:int">1</extent>
                    <locationCode xsi:type="xsd:int">31593</locationCode>
                    <countryCode xsi:type="xsd:int">4</countryCode>
                    <ltn xsi:type="xsd:int">56</ltn>
                    <diversionAdvice xsi:type="xsd:int">0</diversionAdvice>
                    <slAdvice xsi:type="xsd:int">0</slAdvice>
                    <quantifier xsi:type="xsd:int">0</quantifier>
                    <suppInfoCode xsi:type="xsd:int">0</suppInfoCode>
                    <addEvent xsi:type="xsd:int">0</addEvent>
                    <detDivAdvice xsi:type="xsd:int">0</detDivAdvice>
                    <destinations xsi:type="xsd:int">0</destinations>
                    <clSourceProblem xsi:type="xsd:int">0</clSourceProblem>
                    <eventCode xsi:type="xsd:int">802</eventCode>
                    <timeInfo xsi:type="tns:TimeInfo">
                        <start xsi:type="xsd:string">21/06/2009 14:00:00</start>
                        <finish xsi:type="xsd:string">05/11/2009 14:00:00</finish>
                        <timeZone xsi:type="xsd:string">Australia/Brisbane</timeZone>
                    </timeInfo>
                    <location xsi:type="tns:Point">
                        <lat xsi:type="xsd:float">-27.3112692120521</lat>
                        <lon xsi:type="xsd:float">153.029100894928</lon>
                    </location>
                    <additionalStreetInfo 
                      xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:AdditionalStreetInfo[1]">
                        <item xsi:type="tns:AdditionalStreetInfo">
                            <street xsi:type="xsd:string">Bracken Ridge Rd</street>
                            <type xsi:type="xsd:string">CROSS</type>
                        </item>
                    </additionalStreetInfo>
                    <address xsi:type="tns:Address">
                        <streetNumber xsi:type="xsd:string"/>
                        <streetName xsi:type="xsd:string">Bracken Ridge Rd</streetName>
                        <suburb xsi:type="xsd:string">Bracken Ridge</suburb>
                        <state xsi:type="xsd:string">QLD</state>
                    </address>
                </item>
                <item xsi:type="tns:TrafficInfo">
                    <id xsi:type="xsd:string">1245632111995</id>
                    <entryDate xsi:type="xsd:datetime">22/06/2009 10:55:11</entryDate>
                    <direction xsi:type="xsd:int">1</direction>
                    <extent xsi:type="xsd:int">1</extent>
                    <locationCode xsi:type="xsd:int">31592</locationCode>
                    <countryCode xsi:type="xsd:int">4</countryCode>
                    <ltn xsi:type="xsd:int">56</ltn>
                    <diversionAdvice xsi:type="xsd:int">0</diversionAdvice>
                    <slAdvice xsi:type="xsd:int">0</slAdvice>
                    <quantifier xsi:type="xsd:int">0</quantifier>
                    <suppInfoCode xsi:type="xsd:int">0</suppInfoCode>
                    <addEvent xsi:type="xsd:int">0</addEvent>
                    <detDivAdvice xsi:type="xsd:int">0</detDivAdvice>
                    <destinations xsi:type="xsd:int">0</destinations>
                    <clSourceProblem xsi:type="xsd:int">0</clSourceProblem>
                    <eventCode xsi:type="xsd:int">802</eventCode>
                    <timeInfo xsi:type="tns:TimeInfo">
                        <start xsi:type="xsd:string">21/06/2009 14:00:00</start>
                        <finish xsi:type="xsd:string">05/11/2009 14:00:00</finish>
                        <timeZone xsi:type="xsd:string">Australia/Brisbane</timeZone>
                    </timeInfo>
                    <location xsi:type="tns:Point">
                        <lat xsi:type="xsd:float">-27.3125370752656</lat>
                        <lon xsi:type="xsd:float">153.042898178101</lon>
                    </location>
                    <additionalStreetInfo 
                       xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:AdditionalStreetInfo[1]">
                        <item xsi:type="tns:AdditionalStreetInfo">
                            <street xsi:type="xsd:string">Bracken Ridge Rd</street>
                            <type xsi:type="xsd:string">CROSS</type>
                        </item>
                    </additionalStreetInfo>
                    <address xsi:type="tns:Address">
                        <streetNumber xsi:type="xsd:string"/>
                        <streetName xsi:type="xsd:string">Bracken Ridge Rd</streetName>
                        <suburb xsi:type="xsd:string">Bracken Ridge</suburb>
                        <state xsi:type="xsd:string">QLD</state>
                    </address>
                </item>
            </return>
        </ns1:getAllTrafficResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

这是 wsdl.exe 中的错误吗?我有几个与 wsdl.exe 的不愉快遭遇 http://itscommonsensestupid.blogspot.com/2009/06/bugs-in-wsdlexe.html。以下是我帖子中概述的问题:

它无法处理的第一个问题 具有复杂元素的序列。你 会认为在今天的网络服务中 环境,一系列复杂的 要素是常态。但显然 微软不这么认为,而且这个 导致 wsdl.exe 无法 处理一系列复杂元素。

如果您坚持使用 wsdl.exe 怎么办 为元素生成代理类 具有一系列复杂类型?你 会得到一个神秘的异常:无法 从命名空间导入绑定* - 无法导入操作* - 数据类型 * 丢失 wsdl 的第二个错误是它不是 允许有两个网络方法 具有相同的返回签名。 是的,如果一个方法返回一种类型 ComplexType,其他方法必须 有不同的返回类型。失败 这样做将导致 System.InvalidOperationException: XML 元素 * 来自命名空间 * 引用a 引用方法和a 类型异常。

请注意,在这两种情况下,消息 是神秘的。你实际上不会知道 幕后发生了什么。和 这是最令人沮丧的。 你不知道自己是否失败 因为这个工具很糟糕,或者因为 你没有做正确的事。

或许你可以参考一下这个帖子 https://stackoverflow.com/questions/1049839/alternatives-to-wsdl-exe-for-creating-proxy-classes-from-wsdl作为 wsdl.exe 的替代品。

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

在 .NET 中使用 RPC/编码的 SOAP Web 服务时出错 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 为什么我的查询只显示一个结果?

    为什么我从下面的查询中只得到一个结果 建议的 答案 的名字是 Susan 而不是我在结果中得到的名字 SELECT EmpFirstName EmpLastName p ProductName as ProductName YEAR c O
  • 分割功能 - 避免最后一个空白空间

    我对如何使用 split 功能有疑问 str James Joseph Arun str split 我得到了结果 James Joseph Arun 我需要输出为 James Joseph Arun 最好的方法是什么 要删除所有空字符串
  • Mongo数据库保存Map中的数据

    我有以下有效的代码 if aDBCursor hasNext DBObject aDbObject aDBCursor next aDbObject put title Test Title ArrayList
  • 如何仅以编程方式禁用我的应用程序的移动数据

    我正在开发一个应用程序 我担心用户之间可以传输的数据量 由于一些用户的移动数据计划有限 而另一些则没有 我想知道是否可以开发一个开关来禁用我的特定应用程序的移动数据 有点像Android自己的数据使用 gt 移动 gt 应用程序 gt 限制
  • Typescript - 逐步扩展对象的类型

    我试图通过 TS 实现以下目标 let m Extendable m add one 1 m now has one field m add two 2 m now has one and two fields 我熟悉通过以下方式在 TS
  • Python - 在特定长度的文件中查找字符串,并且该字符串必须是大写字母和数字

    我想找到一个特定长度的字符串 例如 7 个字符 该字符串只能包含大写字母和数字 我有想法 逐行读取文件 我不确定这里的最佳实践是在一个块中读取整个文件还是使用循环逐行读取文件 必须使用循环逐行读取文件吗 read lines in text
  • GA 中的排名选择?

    我已经实施了Roulette wheel selection in GA TotalFitness sum Fitness ProbSelection zeros PopLength 1 CumProb zeros PopLength 1
  • matlab数据文件到pandas DataFrame [重复]

    这个问题在这里已经有答案了 有没有标准的转换方法matlab mat matlab格式数据 文件到PandaDataFrame 我知道可以通过使用解决方法scipy io但我想知道是否有一种简单的方法可以做到这一点 我找到了两种方法 sci
  • 在垂直和水平步进材料之间切换

    如何切换垫子垂直步进器 and 矩阵水平步进器来自具有相同步进步骤的角度分量 为了避免重写相同的 html 内容 请这样做 创建模板并使用 hashtag 然后你可以使用插入它们ng container ngTemplateOutlet h
  • Android 6.0 Marshmallow:片段动画出现奇怪的错误

    我在应用商店中的一个应用程序在 Android 5 0 上运行得非常好 但自从今天我将我的设备升级到 6 0 后 我遇到了奇怪的错误 我将其范围缩小到片段过渡动画 ftrans setCustomAnimations inAnim outA
  • constexpr 函数何时在编译时进行求值?

    既然声明为 constexpr 的函数有可能在运行时被调用 那么编译器根据什么标准决定是在编译时还是在运行时计算它呢 template
  • java-8中的Stream方法是如何实现的?

    当我尝试新的 java 8 Stream 时 我想深入了解它的方法是如何实现的 所以我查看了 Stream 类的实现 发现所有方法都是抽象的 我的问题是这些方法怎么样distinct and map 它必须在某个地方有具体的实现 这些方法在
  • Apache Camel 同时处理两个 csv 文件

    我正在尝试处理两个 csv文件并将其数据保存到数据库中 我使用的是 java dsl 而不是 spring 为了更好地解释这个场景 我正在读两本 csv文件并处理它们以将数据上传到 sql 数据库中 我为此执行的步骤是 在 servlet
  • 来自 SAS url 的 Azcopy 给出错误

    我正在尝试从 SAS URL 位置复制到目标存储帐户 我尝试了以下命令 但出现了一些错误 AzCopy exe 来源 Dest https yyyyyyyy blob core windows net vhds https yyyyyyyy
  • Firebase,变量作为键名

    我基本上想做的是 variable whatever fb set variable More Stuff 因此 这将导致一个如下所示的条目 whatever More Stuff 目前它只是结束为 variable More Stuff
  • Cassandra 中的 RPC 超时

    我收到以下错误 cqlsh dev gt SELECT DISTINCT id FROM raw data Request did not complete within rpc timeout 这是一个我永远不会再进行的特殊查询 我不在乎
  • 新上传的版本未在 App Store Connect 中显示或处理

    我在过去 48 小时内上传了多个版本 但没有一个在 App Store Connect 中出现或处理 构建已通过 Xcode 成功上传 还有其他人经历过这种情况并知道潜在的解决方案吗 我已向 Apple 提交了支持票 但我希望能更快得到解决
  • 在 Java EE7 项目中找不到 web.xml

    我正在 eclipse 中使用 JSF 2 2 和 Servlet 3 1 Java EE7 做一个项目 我遇到的第一个问题是 pom xml 中的错误
  • 最有效的便携式溢出检测? [复制]

    这个问题在这里已经有答案了 与 C C 和 D 等金属语言类似 检测无符号 64 位溢出的最有效 合理可移植的方式是什么 即不使用汇编程序 尽管您可能假设二进制补码算术和环绕行为 乘法中的整数 通过将无符号类型可表示的最大值除以被乘数之一
  • 在 .NET 中使用 RPC/编码的 SOAP Web 服务时出错

    我在调用 Web 服务方法时收到以下错误 无法将 System Xml XmlNode 类型的对象分配给 System String 类型的对象 Web 服务是 PHP 服务 我使用此处定义的 wsdl 文档中的 wsdl exe 创建了我