在 .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 服务时出错 的相关文章

  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 从 html 页面和 javascript 调用 java webservice

    我正在尝试从 javascript 调用 java 实现的 Web 服务 使用 NetBeans IDE 我读过很多关于 jQuery 和 AJAX 的内容 但我似乎无法掌握它 假设我的 Web 服务 WSDL 位于 http localh
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

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

    为什么我从下面的查询中只得到一个结果 建议的 答案 的名字是 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 创建了我