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

   Рубрики
 
 
 
 

 Форуми
» SEO и оптимизация
» Всичко за PHP и Perl
» Всичко за C, C++ и .NET
» Всичко за Java и JSP
» Всичко за SQL и MySQL
» Всичко за XHTML и CSS
» Презентация на сайтове
 Сложни типове конструкции в SOAP с PHP
  1. Въведение
  2. SOAP - Сървър
  3. SOAP - Клиент
  4. Целият пример за тестване
Mutatos
     
Автор  Mutatos (12.11.2004 21:48)  съобщение до автора
Погледнат  6525 пъти  добави към любими
Оценка  добави коментар
Гласове  10  изпрати на приятел
Коментари  (2)  абонирай се за PHP
    Страница 2 / 4

 



SOAP - Сървър

Нашият сървър няма да прави нищо по различно от запитване към базатаданни на базата на получена информация. По-сложното тук е дефинирането на типовете на получени и изпратени данни. Точно това ще разгледаме по-обстойно!

Импортираме нашия клас nusoap.php.

CODE
1
require_once('nusoap.php');

Създаване инстанция на класа soap_server

CODE
1
$server = new soap_server();

Инициализиране и дефиниране на WSDL файла
 
CODE
1
2
3
4
5
// Initialize WSDL support
$server->configureWSDL('BooksInterface', 'urn:BooksInterface');

//
Put the WSDL schema types in the namespace with the tns prefix
$server->wsdl->schemaTargetNamespace = 'urn:BooksInterface';

Дефиниране на сложните типове данни

Както споменахме по-горе трябва да използваме масиви за транспортиране на получената и предадената информация. Дефинирането изглежда по следния начин:

CODE
1
2
3
4
5
6
7
8
9
10
$server->wsdl->addComplexType(
   
'ArrayOfstring',
   
'complexType',
   
'array',
   
'',
   
'',
   
array(),
   
array(array('ref'=>'SOAP-ENC:Array','wsdl:arrayType'=>'xsd:string[]')),
   
'xsd:string'
);


Сега дефинирахме един масив от стрингове, който може да съдържа като стойности заглавия на книги, ключови думи и имена на автори.

Дефиниране на изходните данни, които ще се връщат като резултат от функцията

CODE
1
2
3
4
5
6
7
8
9
10
11
12
$server->wsdl->addComplexType(
   
'BooksResponse',
   
'complexType',
   
'struct',
   
'all',
   
'',
   
array(
       
'title' => array('name' => 'title', 'type' => 'xsd:string'),
       
'author' => array('name' => 'author', 'type' => 'xsd:string'),
       
'isbn' => array('name' => 'isbn', 'type' => 'xsd:string')
    )
)
;

BookResponse съдържа трите полета, които ще съдържат необходимата информация за дадена книга. Тъй като обаче ще трябва да изпращаме няколко на брой книги, то тогава ще дефинираме един масив за тази информация.

CODE
1
2
3
4
5
6
7
8
9
10
$server->wsdl->addComplexType(
   
'BooksResponseArray',
   
'complexType',
   
'array',
   
'',
   
'',
   
array(),
   
array(array('ref'=>'SOAP-ENC:Array','wsdl:arrayType'=>'tns:BooksResponse[]')),
   
'tns:BooksResponse'
);


След като дефинирахме комплексната структура на данните, нека продължим нататък с регистрирането на необходимата функция.

CODE
1
2
3
4
5
6
7
8
9
$server->register('BookInformation',                 // method name
    array
('queryarray' => 'tns:ArrayOfstring'),        // input parameters
    array
('return' => 'tns:BooksResponseArray'),      // output parameters
   
'urn:BooksInterface',                           // namespace
   
'urn:BooksInterface#BookInformation',            // soapaction
   
'rpc',                                          // style
   
'encoded',                                      // use
   
'Get information about books'                     // documentation
);


Като последно ще създадем нашата функция, която ще обработва информацията и ще предостави подробна информация за запитването.

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function BookInformation($queryarray)
{
   
mysql_connect("localhost", "root", "");
   
mysql_select_db("test");
   
   
$books = array();
   
foreach ($queryarray as $value)
    {       
       
$sql = mysql_query("SELECT title, author, isbn FROM books WHERE title LIKE '%".$value."%' OR author LIKE '".$value."'");       
       
$i=0;
       
while($row = mysql_fetch_array($sql))
        {
           
$books[] = array(
               
'title' => $row['title'],
               
'author' => $row['author'],
               
'isbn' => $row['isbn']
                )
;
           
$i++;
       
}
    }
   
mysql_close();
   
   
return $books;
}

Какво прави тази функция?

При получаване на масив, функцията прочита елементите на масива и същевременно създава запитвания към базата за данни и проверява дали има съответствия със стойностите от масива. В случай че има резултати те се записват в двумерния масив $books, който е връщаща стойност на функцията.


След като създадохме нашия сървър, нека да разработим и необходимия клиент за запитването и да направим едно пробно запитване.



 << Предишна страница Следваща страница >> 


Ключови думи: PHP webservice nusoap wsdl файл API soap Simple Object Access Protocol сървър клиент


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


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

 За автора: Mutatos  
Николай Николов се занимава с програмиране на PHP/MySQL повече от 6 години. Заедно с разработката на уеб приложения на PHP, се занимава с Java, XML и Webservices.
   
 1 посетител чете този урок (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

Проблема при SOAP, е че има много голям overhead. Тъй че към тези MB ще се добавят още няколко при транспорта. Но това може да се игнорира в зависимост от това, какво приложение имаш. Толкова големи данни не нъм транспортирал, но според мен това е много за SOAP.

  Mutatos на 13.01.2008 16:06

  А по принцип, дали може да се работи с nuSoap библиотеката за пренос на повечко данни, грубо около 7-8 MB, примерно ?

  Нямам на разположение SOAP Server и затова искам да попитам ?

  Miro на 12.01.2008 14:04

 

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



IT-PLACE.NET © 2004 - 2008