Форматировщик выдал исключение при попытке десериализации сообщения: - PullRequest
1 голос
/ 21 марта 2012

Я получил wsdl от клиента для потребления.Я использую суп для этого.Я получил xml-запрос типа

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:vmps="http://dynamicops.com/VMPS" xmlns:dyn="http://DynamicOps.VMPS.Model" xmlns:dyn1="http://schemas.datacontract.org/2004/07/DynamicOps.VMPS.Model" xmlns:dyn2="http://DynamicOps.Common.BaseModel">
   <soapenv:Header/>
   <soapenv:Body>
      <vmps:CreateVirtualMachineTemplate>
         <!--Optional:-->
         <vmps:identityToken>
            <!--Optional:-->
            <dyn:ImpersonatingUser>?</dyn:ImpersonatingUser>
            <!--Optional:-->
            <dyn:User>?</dyn:User>
         </vmps:identityToken>
         <!--Optional:-->
         <vmps:template>
            <!--Optional:-->
            <dyn1:ID>?</dyn1:ID>
            <!--Optional:-->
            <dyn2:Name>?</dyn2:Name>
            <!--Optional:-->
            <dyn2:Description>?</dyn2:Description>
            <!--Optional:-->
            <dyn:ApprovalPolicyId>?</dyn:ApprovalPolicyId>
            <!--Optional:-->
            <dyn:BlueprintType>?</dyn:BlueprintType>
            <!--Optional:-->
            <dyn:Cost>?</dyn:Cost>
            <!--Optional:-->
            <dyn:CpuCount>?</dyn:CpuCount>
            <!--Optional:-->
            <dyn:CpuCountMax>?</dyn:CpuCountMax>
            <!--Optional:-->
            <dyn:CreatedAt>?</dyn:CreatedAt>
            <!--Optional:-->
            <dyn:DeletedAt>?</dyn:DeletedAt>
            <!--Optional:-->
            <dyn:DiskSize0InGB>?</dyn:DiskSize0InGB>
            <!--Optional:-->
            <dyn:DiskSizeMaxGB>?</dyn:DiskSizeMaxGB>
            <!--Optional:-->
            <dyn:Enabled>?</dyn:Enabled>
            <!--Optional:-->
            <dyn:ExpireDays>?</dyn:ExpireDays>
            <!--Optional:-->
            <dyn:GlobalProfileID>?</dyn:GlobalProfileID>
            <!--Optional:-->
            <dyn:Groups>
               <!--Zero or more repetitions:-->
               <dyn:GroupBase>
                  <!--Optional:-->
                  <dyn1:ID>?</dyn1:ID>
                  <!--Optional:-->
                  <dyn2:Name>?</dyn2:Name>
                  <!--Optional:-->
                  <dyn2:Description>?</dyn2:Description>
                  <!--Optional:-->
                  <dyn:AdministratorEmail>?</dyn:AdministratorEmail>
                  <!--Optional:-->
                  <dyn:GroupID>?</dyn:GroupID>
                  <!--Optional:-->
                  <dyn:IsTestGroup>?</dyn:IsTestGroup>
               </dyn:GroupBase>
            </dyn:Groups>
            <!--Optional:-->
            <dyn:IsGlobal>?</dyn:IsGlobal>
            <!--Optional:-->
            <dyn:IsMaster>?</dyn:IsMaster>
            <!--Optional:-->
            <dyn:LeaseDays>?</dyn:LeaseDays>
            <!--Optional:-->
            <dyn:LeaseDaysMax>?</dyn:LeaseDaysMax>
            <!--Optional:-->
            <dyn:MachinePrefix>?</dyn:MachinePrefix>
            <!--Optional:-->
            <dyn:MachineType>?</dyn:MachineType>
            <!--Optional:-->
            <dyn:MaxVMsPerUser>?</dyn:MaxVMsPerUser>
            <!--Optional:-->
            <dyn:Members>?</dyn:Members>
            <!--Optional:-->
            <dyn:MemoryInMB>?</dyn:MemoryInMB>
            <!--Optional:-->
            <dyn:MemoryMaxMB>?</dyn:MemoryMaxMB>
            <!--Optional:-->
            <dyn:ParentID>?</dyn:ParentID>
            <!--Optional:-->
            <dyn:RequiresApproval>?</dyn:RequiresApproval>
            <!--Optional:-->
            <dyn:ReservationPolicyID>?</dyn:ReservationPolicyID>
            <!--Optional:-->
            <dyn:UpdatedAt>?</dyn:UpdatedAt>
            <!--Optional:-->
            <dyn:WorkflowID>?</dyn:WorkflowID>
            <!--Optional:-->
            <dyn:WorkflowInfo>
               <!--Optional:-->
               <dyn1:ID>?</dyn1:ID>
               <!--Optional:-->
               <dyn2:Name>?</dyn2:Name>
               <!--Optional:-->
               <dyn2:Description>?</dyn2:Description>
               <!--Optional:-->
               <dyn:AssemblyFQN>?</dyn:AssemblyFQN>
               <!--Optional:-->
               <dyn:BuildTagType>?</dyn:BuildTagType>
            </dyn:WorkflowInfo>
            <!--Optional:-->
            <dyn:HiddenProperties>
               <!--Zero or more repetitions:-->
               <dyn:NameValue>
                  <!--Optional:-->
                  <dyn:IsEncrypted>?</dyn:IsEncrypted>
                  <!--Optional:-->
                  <dyn:IsHidden>?</dyn:IsHidden>
                  <!--Optional:-->
                  <dyn:IsRuntime>?</dyn:IsRuntime>
                  <!--Optional:-->
                  <dyn:Name>?</dyn:Name>
                  <!--Optional:-->
                  <dyn:Value>?</dyn:Value>
               </dyn:NameValue>
            </dyn:HiddenProperties>
            <!--Optional:-->
            <dyn:LeaseCostFormatted>?</dyn:LeaseCostFormatted>
            <!--Optional:-->
            <dyn:Parent>
               <!--Optional:-->
               <dyn1:ID>?</dyn1:ID>
               <!--Optional:-->
               <dyn2:Name>?</dyn2:Name>
               <!--Optional:-->
               <dyn2:Description>?</dyn2:Description>
               <!--Optional:-->
               <dyn:ApprovalPolicyId>?</dyn:ApprovalPolicyId>
               <!--Optional:-->
               <dyn:BlueprintType>?</dyn:BlueprintType>
               <!--Optional:-->
               <dyn:Cost>?</dyn:Cost>
               <!--Optional:-->
               <dyn:CpuCount>?</dyn:CpuCount>
               <!--Optional:-->
               <dyn:CpuCountMax>?</dyn:CpuCountMax>
               <!--Optional:-->
               <dyn:CreatedAt>?</dyn:CreatedAt>
               <!--Optional:-->
               <dyn:DeletedAt>?</dyn:DeletedAt>
               <!--Optional:-->
               <dyn:DiskSize0InGB>?</dyn:DiskSize0InGB>
               <!--Optional:-->
               <dyn:DiskSizeMaxGB>?</dyn:DiskSizeMaxGB>
               <!--Optional:-->
               <dyn:Enabled>?</dyn:Enabled>
               <!--Optional:-->
               <dyn:ExpireDays>?</dyn:ExpireDays>
               <!--Optional:-->
               <dyn:GlobalProfileID>?</dyn:GlobalProfileID>
               <!--Optional:-->
               <dyn:Groups>
                  <!--Zero or more repetitions:-->
                  <dyn:GroupBase>
                     <!--Optional:-->
                     <dyn1:ID>?</dyn1:ID>
                     <!--Optional:-->
                     <dyn2:Name>?</dyn2:Name>
                     <!--Optional:-->
                     <dyn2:Description>?</dyn2:Description>
                     <!--Optional:-->
                     <dyn:AdministratorEmail>?</dyn:AdministratorEmail>
                     <!--Optional:-->
                     <dyn:GroupID>?</dyn:GroupID>
                     <!--Optional:-->
                     <dyn:IsTestGroup>?</dyn:IsTestGroup>
                  </dyn:GroupBase>
               </dyn:Groups>
               <!--Optional:-->
               <dyn:IsGlobal>?</dyn:IsGlobal>
               <!--Optional:-->
               <dyn:IsMaster>?</dyn:IsMaster>
               <!--Optional:-->
               <dyn:LeaseDays>?</dyn:LeaseDays>
               <!--Optional:-->
               <dyn:LeaseDaysMax>?</dyn:LeaseDaysMax>
               <!--Optional:-->
               <dyn:MachinePrefix>?</dyn:MachinePrefix>
               <!--Optional:-->
               <dyn:MachineType>?</dyn:MachineType>
               <!--Optional:-->
               <dyn:MaxVMsPerUser>?</dyn:MaxVMsPerUser>
               <!--Optional:-->
               <dyn:Members>?</dyn:Members>
               <!--Optional:-->
               <dyn:MemoryInMB>?</dyn:MemoryInMB>
               <!--Optional:-->
               <dyn:MemoryMaxMB>?</dyn:MemoryMaxMB>
               <!--Optional:-->
               <dyn:ParentID>?</dyn:ParentID>
               <!--Optional:-->
               <dyn:RequiresApproval>?</dyn:RequiresApproval>
               <!--Optional:-->
               <dyn:ReservationPolicyID>?</dyn:ReservationPolicyID>
               <!--Optional:-->
               <dyn:UpdatedAt>?</dyn:UpdatedAt>
               <!--Optional:-->
               <dyn:WorkflowID>?</dyn:WorkflowID>
               <!--Optional:-->
               <dyn:WorkflowInfo>
                  <!--Optional:-->
                  <dyn1:ID>?</dyn1:ID>
                  <!--Optional:-->
                  <dyn2:Name>?</dyn2:Name>
                  <!--Optional:-->
                  <dyn2:Description>?</dyn2:Description>
                  <!--Optional:-->
                  <dyn:AssemblyFQN>?</dyn:AssemblyFQN>
                  <!--Optional:-->
                  <dyn:BuildTagType>?</dyn:BuildTagType>
               </dyn:WorkflowInfo>
            </dyn:Parent>
            <!--Optional:-->
            <dyn:Properties>
               <!--Zero or more repetitions:-->
               <dyn:NameValue>
                  <!--Optional:-->
                  <dyn:IsEncrypted>?</dyn:IsEncrypted>
                  <!--Optional:-->
                  <dyn:IsHidden>?</dyn:IsHidden>
                  <!--Optional:-->
                  <dyn:IsRuntime>?</dyn:IsRuntime>
                  <!--Optional:-->
                  <dyn:Name>?</dyn:Name>
                  <!--Optional:-->
                  <dyn:Value>?</dyn:Value>
               </dyn:NameValue>
            </dyn:Properties>
         </vmps:template>
      </vmps:CreateVirtualMachineTemplate>
   </soapenv:Body>
</soapenv:Envelope>

Когда я отправляю этот запрос, я получаю ответ типа

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <s:Fault>
         <faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:DeserializationFailed</faultcode>
         <faultstring xml:lang="en-US">The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://dynamicops.com/VMPS:template. The InnerException message was 'There was an error deserializing the object of type DynamicOps.VMPS.Model.VirtualMachineTemplateEx. The value '?' cannot be parsed as the type 'Guid'.'.  Please see InnerException for more details.</faultstring>
         <detail>
            <ExceptionDetail xmlns="http://schemas.datacontract.org/2004/07/System.ServiceModel" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
               <HelpLink i:nil="true"/>
               <InnerException>
                  <HelpLink i:nil="true"/>
                  <InnerException>
                     <HelpLink i:nil="true"/>
                     <InnerException>
                        <HelpLink i:nil="true"/>
                        <InnerException i:nil="true"/>
                        <Message>Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).</Message>
                        <StackTrace>at System.Guid.GuidResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument, String failureArgumentName, Exception innerException)
   at System.Guid.TryParseGuidWithNoStyle(String guidString, GuidResult&amp; result)
   at System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult&amp; result)
   at System.Guid.Parse(String input)
   at System.Runtime.Serialization.XmlReaderDelegator.ReadElementContentAsGuid()</StackTrace>
                        <Type>System.FormatException</Type>
                     </InnerException>
                     <Message>The value '?' cannot be parsed as the type 'Guid'.</Message>
                     <StackTrace>at System.Runtime.Serialization.XmlReaderDelegator.ReadElementContentAsGuid()
   at ReadVirtualMachineTemplateExFromXml(XmlReaderDelegator , XmlObjectSerializerReadContext , XmlDictionaryString[] , XmlDictionaryString[] )
   at System.Runtime.Serialization.ClassDataContract.ReadXmlValue(XmlReaderDelegator xmlReader, XmlObjectSerializerReadContext context)
   at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, Type declaredType, DataContract&amp; dataContract)
   at System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract dataContract, String name, String ns)
   at System.Runtime.Serialization.DataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
   at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)</StackTrace>
                     <Type>System.Xml.XmlException</Type>
                  </InnerException>
                  <Message>There was an error deserializing the object of type DynamicOps.VMPS.Model.VirtualMachineTemplateEx. The value '?' cannot be parsed as the type 'Guid'.</Message>
                  <StackTrace>at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
   at System.Runtime.Serialization.DataContractSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName)
   at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest)</StackTrace>
                  <Type>System.Runtime.Serialization.SerializationException</Type>
               </InnerException>
               <Message>The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://dynamicops.com/VMPS:template. The InnerException message was 'There was an error deserializing the object of type DynamicOps.VMPS.Model.VirtualMachineTemplateEx. The value '?' cannot be parsed as the type 'Guid'.'.  Please see InnerException for more details.</Message>
               <StackTrace>at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameterPart(XmlDictionaryReader reader, PartInfo part, Boolean isRequest)
   at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.DeserializeParameters(XmlDictionaryReader reader, PartInfo[] parts, Object[] parameters, Boolean isRequest)
   at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.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.DeserializeRequest(Message message, Object[] parameters)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc)
   at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)</StackTrace>
               <Type>System.ServiceModel.Dispatcher.NetDispatcherFaultException</Type>
            </ExceptionDetail>
         </detail>
      </s:Fault>
   </s:Body>
</s:Envelope>

Может кто-нибудь помочь мне в чем проблема?Заранее спасибо.

1 Ответ

2 голосов
/ 21 марта 2012

Вы должны заполнить свой запрос значениями, где он теперь помечен знаком «?». Сообщение об ошибке говорит, что поле типа GUID содержит недопустимое значение, и, поскольку ваш запрос все "?" действительный идентификатор GUID не существует. Заполните ваш запрос приличными ценностями, и проблема должна исчезнуть.

Учебник, в котором упоминается синтаксис вопросительного знака: здесь

...