Web service - xml request

0

Dzien dobry,

Na poczatku zaznacze ze jestem "szczypiorkiem" w temacie Web service, wiec prosze o wyrozumialosc.
Potrzebuje wyslac zapytanie do server "POST" w formacie xml. Samo wyslanie i odebranie response to nie problem.
Problem jest z formatowaniem xml.
Request wyglada nastepujaco:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
 xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:ns="urn:datapower">
 <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <ns:getmsg>
   <name>REQUEST</name>
  </ns:getmsg>
 </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

gdzie REQUEST to dane ktore musze przeslac do server. Response jest w podobnym formacie.
Pytanie jak zrobic to zgodnie ze standardami i dobrymi obyczajami ;)
Rozwiazanie 1.
Wczytac powyzszy plik za do stream zamienic REQUEST na potrzebne dane i wyslac.
Rozwiazanie 2.
Stworzyc class z xml wczytac za pomoca Serialize zamienic REQUEST i wyslac.
Tu zrodzily sie watpliwosci. Stworzylem class za pomace wklej specjalnie, potem wczytalem request z pliku xml i zapisalem go ponownie do xml.
Niestety pilki sie roznia. Wynik zapisania jest nastepujacy:

<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/soap/envelope/">
  <Body d2p1:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:d2p1="http://schemas.xmlsoap.org/soap/envelope/">
    <getmsg xmlns="urn:datapower">
      <name xmlns="">REQUEST</name>
    </getmsg>
  </Body>
</Envelope>

Nie wiem czy roznice sa istotne dla servera :(

Serializacja i deserializacja wyglada tak:

System.Xml.Serialization.XmlSerializer readwrite = new System.Xml.Serialization.XmlSerializer(request.GetType());
StreamReader fileread = new StreamReader("request.xml");
request = (Envelope)readwrite.Deserialize(fileread);
fileread.Close();

 System.Xml.Serialization.XmlSerializer writereq = new System.Xml.Serialization.XmlSerializer(request.GetType());
 StreamWriter filewrite = new StreamWriter("request_gen.xml");
 writereq.Serialize(filewrite, request);
  filewrite.Close();

Teraz pytania o standardy i praktyke.
Po ewentualnym update servera, moze nastapic zmiana format requesta, wtedy jedynym rozwiazaniem jest zmiana program. Czy jest to normalna praktyka? Czy jest przyjete ze taki request jest "custmizowalny" przez urzytkownika? To znaczy uzytkownik dostaje plik xml, program go wczytuje, uzytkownik pokazuje gdzie sa dane? Czy w ogole brac cos takiego pod uwage? W moim przypadku jest to bardz malo prawdopodobne, poniewaz jest to server z danymi produkcji w izolowanej sieci, ale wolalbym zeby program, o ile to mozliwe, spelnial standardy.
Wszelkie porady jak to zrobic to optymalnie i "customizowalne", w granicach rozsadku, mile widziane.

3

Przeczytaj o WSDL oraz "consuming soap web services in [język programowania]" powinno nieco rozjaśnić Ci temat.

0

Witam,

Może podziel problem na dwie części, pierwsza część będzie odpowiadała za serializację twojego obiektu do XML a druga za okapowanie tego co dostaniesz w Soap Envelope

Pozdrawiam,

mr-owl

1 użytkowników online, w tym zalogowanych: 0, gości: 1