我正在尝试从合作伙伴的服务器使用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服务客户端?
开发环境: