Deserialisieren einer soap-Nachricht

habe ich einen Anbieter extern, senden Sie mir, dass xml für den test

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
               xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
   <AVCabeza transactionID="000032" xmlns="http://webservices.patito/Core/">
   <Solicitor entityID="WEST" systemType="WEB" />   
  </AVCabeza>
</soap:Header>
<soap:Body>
    <Availability xmlns:a="http://webservices.patito/Availability/" 
      xmlns:hc="http://webservices.patito/Common/" summaryOnly="true" 
      xmlns="http://webservices.patito/og/Availability.wsdl">
     <a:AvailabilityDetail availReqType="Room">
       <a:Estadia>
        <hc:StartDate>2009-01-05T00:00:00.0000000-05:00</hc:StartDate>
          <hc:EndDate>2009-01-06T00:00:00.0000000-05:00</hc:EndDate>
       </a:Estadia>
       <a:HotelSearchCriteria>              
            <a:HotelRef chainCode="WC"/>            
       </a:HotelSearchCriteria>
      </a:AvailabilityDetail>
     </Availability>
  </soap:Body>
</soap:Envelope>

Möchte ich deserializer so hab ich es

1) ich habe die xsd für das generieren von c# - Klasse

2) Erstellen Sie ein neues Projekt Klassenbibliothek mit der Klasse erzeugen.

Die Struktur

WebServicesExterns (Projekt)
--> Dienste (Ordner)
---> alle Klasse

Beispiel

namespace WebServicesExterns.Services

<System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42"), _
 System.SerializableAttribute(), _
 System.Diagnostics.DebuggerStepThroughAttribute(), _
 System.ComponentModel.DesignerCategoryAttribute("code"), _
 System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://webservices.patito/Availability.wsdl")> _
Partial Public Class Availability




'''<comentarios/>
<System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.42"),  _
System.SerializableAttribute(),  _
System.Diagnostics.DebuggerStepThroughAttribute(),  _
System.ComponentModel.DesignerCategoryAttribute("code"),  _
System.Xml.Serialization.XmlTypeAttribute([Namespace]:="http://webservices.patito/Core/"),  _
System.Xml.Serialization.XmlRootAttribute([Namespace]:="http://webservices.patito/Core/", IsNullable:=false)>  _
Partial Public Class AVCabeza

3) Nach erstellen einer test-Klasse für versuchen deserializer

using WebServicesExterns.Services;
using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Runtime.Remoting;
using System.Runtime.Serialization;
using System.Xml;
using System.Xml.Serialization;
using NUnit.Framework;
using System.Reflection;
using System.Runtime.Serialization.Formatters.Soap;


    [Test()]
    public void ShouldDeserializerSoapMessage()
    {
        var message = SoapToFromFile(@"C:\rq\Availability.xml");
        Assert.IsNotNull(message);
    }


    public object SoapToFromFile(string filePath)
    {
        IFormatter formatter;
        FileStream fileStream = null;
        Object objectFromSoap = null;            

        try
        {
            fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            formatter = new SoapFormatter();
            objectFromSoap = formatter.Deserialize(fileStream);
        }
        catch (Exception exception)
        {
            throw exception;
        }
        finally
        {
            if (fileStream != null) fileStream.Close();
        }
        return objectFromSoap;
    }

So, zurück, die Fehler

Parse Error, keine Montage im Zusammenhang mit Xml-key "AVCabeza" "_P1"

Debugging gründete ich, was _P1 ist gleich "http://webservices.patito/Core/"

Anscheinend nicht gefunden "Typ" AVCabeza Klasse

Was ist falsch?

Neues update

Sich der Anbieter mir

einem Ordner mit der Struktur

root
|
--  WSDL_XSD
|    |-XSD
|    |   files with extension .xsd
|    | 
|    --WS
|        files with extension .wsdl
|-- XMLSamples
     |-files with xml extension that contain soap messsages

gut ich lösche die xml - (vorherigen Beispiel) die Kopf

<?xml version="1.0" encoding="utf-8"?>
<Availability xmlns:a="http://webservices.patito/Availability/" 
      xmlns:hc="http://webservices.patito/Common/" summaryOnly="true" 
      xmlns="http://webservices.patito/og/Availability.wsdl">
     <a:AvailabilityDetail availReqType="Room">
       <a:Estadia>
        <hc:StartDate>2009-01-05T00:00:00.0000000-05:00</hc:StartDate>
          <hc:EndDate>2009-01-06T00:00:00.0000000-05:00</hc:EndDate>
       </a:Estadia>
       <a:HotelSearchCriteria>              
            <a:HotelRef chainCode="WC"/>            
       </a:HotelSearchCriteria>
      </a:AvailabilityDetail>
</Availability>

und wird versuchen, sich deserializable Verfügbarkeit Objekt, aber nicht diese Marke

not expected "<Availability .."

nun in wsdl_xsd -> ws -> ws sehe ich die Verfügbarkeit gibt, so denke ich, was ist die Verfügbarkeit wickeln zu availabilitydetail (echte Anfrage), welches das Objekt ist, das kann ich nicht löschen
Verfügbarkeit tag, weil es-namespace spacefications für Kinder von tags

was denken Sie darüber?

vielleicht, wenn ich es löschen Sie die Verfügbarkeit und einfügen namespaces (irgendwie), ich könnte meine de-serializer-Objekt

InformationsquelleAutor Carlos Cocom | 2011-04-26

Schreibe einen Kommentar