При попытке вызвать веб-службу для HP Operations Orchestration я получаю сообщение об ошибке ниже. Похоже, WSDL неправильно форматирует ответ, или я неправильно обрабатываю ответ. Большинство вещей, которые я видел в Интернете, относятся к тому, что размер сообщения слишком мал. Это, похоже, не так. Я изменил просто использование var, и это не помогает. Есть идеи?Ошибка веб-службы «Ошибка в десериализации тела сообщения ответа для работы»
Зов: var h = OOSRClient.getFlowRunHistoryByRunId(1);
Исключение:
System.ServiceModel.CommunicationException was caught
HResult=-2146233087
Message=Error in deserializing body of reply message for operation 'getFlowRunHistoryByRunId'.
Source=mscorlib
StackTrace:
Server stack trace:
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, String action, MessageDescription messageDescription, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeBodyContents(Message message, Object[] parameters, Boolean isRequest)
at System.ServiceModel.Dispatcher.OperationFormatter.DeserializeReply(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.ProxyOperationRuntime.AfterReply(ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
Exception rethrown at [0]:
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
at TestOO.OOSR.WSCentralService.getFlowRunHistoryByRunId(getFlowRunHistoryByRunIdRequest request)
at TestOO.OOSR.WSCentralServiceClient.TestOO.OOSR.WSCentralService.getFlowRunHistoryByRunId(getFlowRunHistoryByRunIdRequest request) in c:\Users\slippi3\Documents\Visual Studio 2013\Projects\TestOO\TestOO\Service References\OOSR\Reference.cs:line 7526
at TestOO.OOSR.WSCentralServiceClient.getFlowRunHistoryByRunId(Int64 runId) in c:\Users\slippi3\Documents\Visual Studio 2013\Projects\TestOO\TestOO\Service References\OOSR\Reference.cs:line 7532
at TestOO.Controllers.HomeController.Index() in c:\Users\slippi3\Documents\Visual Studio 2013\Projects\TestOO\TestOO\Controllers\HomeController.cs:line 118
InnerException: System.InvalidOperationException
HResult=-2146233079
Message=There is an error in XML document (1, 1287).
Source=System.Xml
StackTrace:
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle)
at System.ServiceModel.Dispatcher.XmlSerializerOperationFormatter.DeserializeBody(XmlDictionaryReader reader, MessageVersion version, XmlSerializer serializer, MessagePartDescription returnPart, MessagePartDescriptionCollection bodyParts, Object[] parameters, Boolean isRequest)
InnerException: System.InvalidCastException
HResult=-2147467262
Message=Cannot assign object of type System.Object[] to an object of type TestOO.OOSR.WSRunHistoryDetailsExtend[].
Source=ma3ir41a
StackTrace:
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderWSCentralService.Read90_Item()
at Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer45.Deserialize(XmlSerializationReader reader)
at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
InnerException:
Вот ответ:
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:getFlowRunHistoryByRunIdResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://wscentralservice.services.dharma.iconclude.com">
<getFlowRunHistoryByRunIdReturn soapenc:arrayType="xsd:anyType[1]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<getFlowRunHistoryByRunIdReturn xsi:type="ns2:WSRunHistoryDetailsExtend" xmlns:ns2="http://iconclude.com/webservices/rss/v2.0/soap">
<uuid xsi:type="xsd:string">1111ac59-6bbe-47fa-841f-94e56c1b2111</uuid>
<flowRevision xsi:type="xsd:string">4</flowRevision>
<runHistoryId xsi:type="xsd:long">1</runHistoryId>
<runName xsi:type="xsd:string"></runName>
<userId xsi:type="xsd:string">AA\AAAAAAA</userId>
<status xsi:type="xsd:string">Resolved</status>
<startTime xsi:type="xsd:long">1302621361380</startTime>
<duration xsi:type="xsd:long">100</duration>
<numSteps xsi:type="xsd:int">5</numSteps>
<scheduledBy xsi:type="xsd:string" xsi:nil="true"/>
</getFlowRunHistoryByRunIdReturn>
</getFlowRunHistoryByRunIdReturn>
</ns1:getFlowRunHistoryByRunIdResponse>
</soapenv:Body>
</soapenv:Envelope>
FYI, WSDL - это всего лишь документ. Он не форматирует ответ. Я также предполагаю, что (только для устранения неполадок) вы просто поймаете исключение и отобразите 'ex.ToString()'. Таким образом, вы получите всю информацию, которую хочет рассказать об исключении. –
Спасибо за ответ, я в конечном итоге выяснил, что объект, который WSDL пытался вернуть, и объект, который он возвращал, был другим. Закончилось писать мой собственный класс, чтобы справиться со всем, насколько это хорошо. – SLippi