无法识别指定的类型:name ='Struct'

时间:2020-02-07 10:49:41

标签: c# .net soap webservice-client .net-4.7.2

我正在尝试从合作伙伴的服务器使用SOAP服务。尽管使用Visual Studio工具可以很容易地开发服务包装器。但是,当我尝试添加服务引用时,由于某些错误,我无法获得客户端类。搜索堆栈溢出时,我发现了一个解决方案,建议通过添加为网络参考来实现。我这样做,可以调用登录方法。现在,我对另一个“ get_all_items”方法有疑问。

这是一个例外:

消息:XML文档(2,408)中有错误。

堆栈跟踪:

   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.InvokeAsyncCallback(IAsyncResult result)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at MyProject.MyService.<GetAllItems>d__21.MoveNext() in C:\...\MySolution\MyProject\MyService.cs:line 104

这是内部异常:

消息:无法识别指定的类型:name ='Struct',namespace =“'http://schemas.xmlsoap.org/soap/encoding/',at。

堆栈跟踪:

   at System.Xml.Serialization.XmlSerializationReader.GetPrimitiveType(XmlQualifiedName typeName, Boolean throwOnUnknown)
   at System.Xml.Serialization.XmlSerializationReader.ReadArray(String typeName, String typeNs)
   at System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderIViewServiceService.Read147_get_all_roomsResponse()
   at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer243.Deserialize(XmlSerializationReader reader)
   at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)

这是肥皂反应的信封(我使用其他测试工具并修改了一些私人数据):

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="https://partner.server/somepath/soap.php"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <SOAP-ENV:Body>
    <ns1:itemsResponse>
      <return SOAP-ENC:arrayType="SOAP-ENC:Struct[1]" xsi:type="SOAP-ENC:Array">
        <item xsi:type="SOAP-ENC:Struct">
          <val1 xsi:type="xsd:string">0001</val1>
          <val2 xsi:type="xsd:string">0001</val2>
          <val3 xsi:type="xsd:string">1</val3>
          ...
        </item>
      </return>
    </ns1:itemsResponse>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

.net似乎不喜欢Struct行中的<return SOAP-ENC:arrayType="SOAP-ENC:Struct[1]" xsi:type="SOAP-ENC:Array">类型。请问有什么原因导致此错误吗?我该如何解决这个问题而无需从头开始编写SOAP服务客户端?

开发环境:

  • Windows 10
  • Visual Studio Professional 2017
  • .NET 4.7.2

0 个答案:

没有答案
相关问题