Herkes nasıl PHP bir SOAP isteği gönderebilir biliyor musun?
Benim durumumda, bu o kadar basit değil. Yerleşik PHP SOAP client biz kullanmak zorunda kaldı. NET tabanlı SOAP sunucu ile işe yaramadı. Bu geçersiz bir şema tanımı hakkında şikayet etti. Olsa bile. NET istemci sadece iyi bu sunucu ile çalıştı. Bu arada, bana SOAP birlikte çalışabilirlik bir efsane olduğunu iddia edelim.
Bir sonraki adım oldu NuSOAP. Bu uzunca bir süre çalıştı. Bu arada, Tanrı aşkına, WSDL önbelleğe unutmayın! Ama bile WSDL ile önbelleğe kullanıcılar lanet şey yavaş şikayet etti.
Sonra, biz istekleri montaj ve bunun gibi, SimpleXMLElemnt
ile yanıtları okurken, çıplak HTTP gitmeye karar verdi:
$request_info = array();
$full_response = @http_post_data(
'http://example.com/OTA_WS.asmx',
$REQUEST_BODY,
array(
'headers' => array(
'Content-Type' => 'text/xml; charset=UTF-8',
'SOAPAction' => 'HotelAvail',
),
'timeout' => 60,
),
$request_info
);
$response_xml = new SimpleXMLElement(strstr($full_response, '<?xml'));
foreach ($response_xml->xpath('//@HotelName') as $HotelName) {
echo strval($HotelName) . "\n";
}
PHP 5.2 'sen kadar (surprise-surpise!) olarak yerleşik hiçbir HTTP istemci, orada pecl_http gerektiğini unutmayın
Going to bare HTTP gained us over 30% in SOAP request times. Ve sonra hepimizin performans sunucu adamlara şikayet yönlendirme üzerine.
Sonunda, ben çünkü bu performansı ikinci bir yaklaşım tavsiye ve istemem. Ben genel olarak, PHP gibi dinamik bir dil no benefit tüm bu wsdl / tip-kontrolünden var, düşünüyorum. Tüm bu taslakları nesil ve dinamik vekiller ile, XML okumak ve yazmak için bir fantezi kitaplığı gerekmez. Dil zaten dinamik, ve SimpleXMLElement
gayet güzel çalışıyor, ve kullanımı çok kolaydır. Ayrıca, her zaman iyi olduğunu, less code olacak.
PHP has SOAP support. Just call
$client = new SoapClient($url);
SoapServer bağlanmak ve sonra sadece yaparak fonksiyonları ve arama fonksiyonlarının listesini alabilirsiniz ...
$client->__getTypes();
$client->__getFunctions();
$result = $client->functionName();
Daha http://www.php.net/manual/en/soapclient.soapclient.php için
Sen here ve here bakmak isteyebilirsiniz.
Ilk linkten A Little kod örneği:
<?php
// include the SOAP classes
require_once('nusoap.php');
// define parameter array (ISBN number)
$param = array('isbn'=>'0385503954');
// define path to server application
$serverpath ='http://services.xmethods.net:80/soap/servlet/rpcrouter';
//define method namespace
$namespace="urn:xmethods-BNPriceCheck";
// create client object
$client = new soapclient($serverpath);
// make the call
$price = $client->call('getPrice',$param,$namespace);
// if a fault occurred, output error info
if (isset($fault)) {
print "Error: ". $fault;
}
else if ($price == -1) {
print "The book is not in the database.";
} else {
// otherwise output the result
print "The price of book number ". $param[isbn] ." is $". $price;
}
// kill object
unset($client);
?>
Ben php basit bir SOAP uygulama yaptı. PHP, sabun uzatma sabun tabanlı web hizmetleri oluşturmak için kullanılabilir. http://php.net/soap
Aşağıdaki link size bir örnekle ayrıntılı bir açıklama verecek
http://codeglobe.blogspot.com/2009/03/create-web-service-with-php.html
Ben çok çok basit bir XML isteklerini yapmak için gerekli ve SOAP hız isabet hakkında Ivan Krechetov yorumuna @ okuduktan sonra, ben onun kod çalıştı ve () PHP 5.2 yerleşik değildir http_post_data keşfetti. Gerçekten kurmak isteyen değil, ben bütün sunucularda olan cURL çalıştı. Ben hızlı cURL SOAP karşılaştırıldığında nasıl bilmiyorum rağmen, o emin ne gerekli yapmak kolay oldu. Aşağıda herkes ihtiyacı için cURL ile bir örnek.
$xml_data = '<?xml version="1.0" encoding="UTF-8" ?>
<priceRequest><customerNo>123</customerNo><password>abc</password><skuList><SKU>99999</SKU><lineNumber>1</lineNumber></skuList></priceRequest>';
$URL = "https://test.testserver.com/PriceAvailability";
$ch = curl_init($URL);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml_data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
print_r($output);
Zaten PHP ile bazı SABUN şeyler yaptım ve bazı maddelerinde SOAP PHP içine bilmeniz gerekebilir her şeyi yazdı
Bazı şeyler bir SOAP sunucu. NET'te yazılmış isteğe bağlı alanlar var espacially varsa, garip.