Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 XML SOAP
  1. XML SOAP
DIVASTATOR
     
Автор  DIVASTATOR (10.05.2006 00:58)  съобщение до автора
Погледнат  4933 пъти  добави към любими
Оценка  добави коментар
Гласове  2  изпрати на приятел
Коментари  (1)  абонирай се за XML
    Страница 1 / 1

 



XML SOAP не означаван сапун за XML, а Simple Object Access Protocol.Това е прост протокол базиран на XML за обмяна на информация по HTTP.Или казано по-просто SOAP е протокол за достъп към Ъеб обслужването.С негова помощ вие изпращате съобщения.Днес за обмяна между обекти като COBRA и DCOM се използва RPC (Remote Procedure Calls).Но при RPC възникват проблеми, защото Firewall и Proxy сърварите блокират такъв вид информация.Но със SOAP няма такива проблеми.
Едно съобщение е прост XML документ състоящ се от следните елементи:
  • Задължителния елемент Envelope, който дефинира документа като SOAP съобщение.
  • Незадължителния елемнт Header, който съдържа информация за headera.
  • Задължителения елемнт Body, който съдържа извиканото и полученото съобщение.
  • Незадължителния елемент Fault, който съдържа информация за грешки направени по време на процеса за обмяна.
Всички елемнти горе са декларация на namespace за SOAP:
http://www.w3.org/2001/12/soap-envelope

А декларацията за енкодинга се намира тук:
http://www.w3.org/2001/12/soap-encoding

А ето и някои правила за синтаксисът на тези съобщения:
  • Едно SOAP съобщение траябва да XML с енкодинг.
  • Едно SOAP съобщение трябва да използва SOAP namespace за envelope и енкодинга.
  • Едно SOAP съобщение НЕ трябва да съдържа DTD
  • Едно SOAP съобщение НЕ трябва да съдържа инструкции за процеса.

А ето и скелета на едно съобщение:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<
soap:Header>
  ...
  ...
</soap:Header>
<
soap:Body>
  ...
  ...
 
<soap:Fault>
    ...
    ...
 
</soap:Fault>
</
soap:Body>
</
soap:Envelope>

ENVELOPE елемента е корена на всяко SOAP съобщение.Този елемент дефинира XML документа, като SOAP съобщение.Трябва да отбележим, че атрибута xmlns:soap namespace абсолютно винаги трябва да има стойност http://www.w3.org/2001/12/soap-envelope, и той дефинира обвивката на SOAP съобщението:

CODE
1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

Атрибура soap:encodingStyle се използва за да дефинира типът информация, която се използва в документа.Този атрибут може да се появи във всяко едно съобщене и ще позволи елемнтите, които имат съдържание.Стойноста на този атрибут не е задължително да бъде една и съща навсякаде.Ето синтаксисът на този атрибут:

soap:encodingStyle="URI"

А ето и един пример:

CODE
1
2
3
4
5
6
7
8
<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
...
Message information goes here
...
</soap:Envelope>

HEADER елемнта съдържа header информация.Той съдържа специфична информация (автентичност, възнаграждение и др.) за SOAP съобщението.Този елемент не е задължителен, но ако все пак присъства, той трябва да е дете на Envelope.Всяко дете на този елемент трябва да има квалификация за namespace:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<
soap:Header>
<
m:Trans
xmlns:m="http://www.w3schools.com/transaction/"
soap:mustUnderstand="1">234</m:Trans>
</
soap:Header>
...
...
</soap:Envelope>

Примерът горе съдържа header с Trans елемент.Атрибута soap:mustUnderstand може да има стойност от 1 до 234.SOAP дефинира три елемента в namespace (http://www.w3.org/2001/12/soap-envelope).Тези три атрибута са: actor, mustUnderstand, и encodingStyle.
Атрибутите дефинирани в headera дефинират как получаващия информация да процедира с нея.
 Атрибута Actor може да пътува между изпращащтия и получаващия информация, като преминава през различните тозки по пътя си.Не всичк тозки могат да бъдат дефинирани, но вместо това можете да дефинирате една или две точки по пътя.Синтаксисът на този атрибут е следния:

soap:actor="URI"

И един пример:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<
soap:Header>
<
m:Trans
xmlns:m="http://www.w3schools.com/transaction/"
soap:actor="http://www.w3schools.com/appml/">
234
</m:Trans>
</
soap:Header>
...
...
</soap:Envelope>

Атрибута soap:mustUnderstand се използва за да дефинира дали информациято, която влиза в headera е здължителна или не.Ако сложите стойноста на атрибута да е 1, това дефинира, че получателя на информация трябва да разпознае елемента.Ако получателя не разпознае елемента, тогава ще има грешка при процедурата.
BODY елемнта е задължителен за документа, защото тозо елемент съдржа самото съобщение.Всяко дете на този елемент трябва да е квалифицирано с namespace.Това е един грешен body елемент, който ще индикира грешка:

CODE
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<
soap:Body>
   <
m:GetPrice xmlns:m="http://www.w3schools.com/prices">
      <
m:Item>Apples</m:Item>
   </
m:GetPrice>
</
soap:Body>
</
soap:Envelope>

Примера горе изисква стойноста на Apples.Трябава да отбележим, че елементите m:GetPrice и m:Item са специфични елементи.Те не са стандарт за SOAP.И отговора ще изглежда така:

CODE
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<
soap:Body>
   <
m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
      <
m:Price>1.90</m:Price>
   </
m:GetPriceResponse>
</
soap:Body>
</
soap:Envelope>

FAULT елемента се използва за да задържи някоя грешка възникнала по време на процеса, и за статистика за SOAP съобщението.Грешното съобщение се съхранява в елемента.Този елемент не е задължителен, но ако все пак решите да го сложите, той трябва да е дете на елемента Body.самия елемнт има следните поделементи:

CODE
1
2
3
4
<faultcode>        Индифицира грешка
<faultstring>      Четената от потребителя грешка
<faultactor>       Информация за това кой е причинил грешката
<detail>           Задържа апликацията за специфична грешна информация свързана с елемента Body

Стойностите на елемента faultcode долу ттябва да се използват в елемента, когато има грешка:

VersionMismatch         Невалидна namespace за SOAP Envelope елемента
MustUnderstand          Елемент от Header елемента, със стойност на атрибута mustUnderstand=1, не е рабрана
Client                  Съобщението е некоректно формирано или съдържа некоректна информация
Server                  Има проблем със сървъра, затова съобщението не може да продължи

HTTP комуникира с помоща на TCP/IP.Един потребител на HTTP съдържа HTTP сървър, който използва TCP.Следа като се установи връзка, клиентът може да изпрати HTTP молба към сървъра:

CODE
1
2
3
4
POST /item HTTP/1.1
Host: 189.123.345.239
Content-Type: text/plain
Content-Length: 200

От своя страна сървъра разпознава молбата и изпраща отговор на клиента:

CODE
1
2
3
200 OK
Content-Type: text/plain
Content-Length: 200

Ако сървъра не може да разпознае молбата, ще върне нео такова:

CODE
1
2
400 Bad Request
Content-Length: 0

SOAP методът е HTTP молба/отговор, който пасва със SOAP енкодинг правилата.
HTTP+XML=SOAP
Една SOAP молба може да е HTTP POST или HTTP GET молба.HTTP POST молбата дефинира поне две HTTP headers:Content-Type и Content-Length.
Content-Type header за SOAP молба и отговор дефинира MIME видът за съобщението и енкодинга, изплзвани от XML Body за молба и отговор.Синтаксисът е следния:

CODE
1
Content-Type: MIMEType; charset=character-encoding

И един пример:

CODE
1
2
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8

Content-Length header за SOAP молба или отговор дефинира големината на съобщението в байтове.Синтаксисът е следния:

CODE
1
Content-Length: bytes

И един пример:

CODE
1
2
3
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

За да ви стане по-ясно как действа SOAP разгледайте долния пример:

Молба:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  <
soap:Body xmlns:m="http://www.example.org/stock">
    <
m:GetStockPrice>
      <
m:StockName>IBM</m:StockName>
    </
m:GetStockPrice>
  </
soap:Body>
</
soap:Envelope>

Отговор:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn
<?xml version="1.0"?>
<
soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  <
soap:Body xmlns:m="http://www.example.org/stock">
    <
m:GetStockPriceResponse>
      <
m:Price>34.5</m:Price>
    </
m:GetStockPriceResponse>
  </
soap:Body>
</
soap:Envelope>



   


Ключови думи: xml soap wsdl remote call


Още уроци от тази рубрика


 
  • Подобни теми от myLinks
 

 За автора: DIVASTATOR  
Какво мога да кажа за мен.Аз съм на 17 години от гр. София.Занимавам се с Web Design не професионално (като хоби ми е), но смятам да си искам да си изкарвам хляба с това.За момента нямам готови качени в интернет сайтове, но сега работя над един и се надявам скоро да го има.Това е.
   
 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

Точно тази технология е много добра !

  Miro на 04.05.2007 13:16

 

 
  • Интересно от Софтуер
 



IT-PLACE.NET © 2004 - 2008