Nasıl PHP SoapClient, ASP.NET SOAP sunucusuna karmaşık türleri göndermek için?

1 Cevap php

Merhaba ben bir ASP.NET SOAP sunucusuna PHP diziler, yapılar ve yapılar dizileri gönderirken sorunlar yaşıyorum ...

Herkes bunun için bir sollution var? Ben gün boyunca google'dan ve herhangi sollution benim için çalıştı. Perphaps şey unutuyorum ...

Benim kod örnekleri vardır:

$client = new SoapClient($options);

$pCriteria = new stdClass();
$pCriteria->type=1;
$pCriteria->capacity=4;

//Test 1 (fail):
$resp = $client->GetRooms(array("pCriteria"=>$pCriteria));

//Test 2 (fail):
$resp = $client->GetRooms(array("pCriteria"=>new SoapVar($pCriteria, SOAP_ENC_OBJECT, "TCriteria", "http://www.w3.org/2001/XMLSchema")));

print_r($resp);

Ben TCriteria bir dizi (TCriteria [], TCriteria_Array tip) ... Ben çiğ dizi, SOAP_ENC_ARRAY kodlama ve TCriteria_Array türü ile bir SoapVar, gönderme denedim ya gerektirir fonksiyonlarını nasıl kod biliyorum ... ama yok o (SOAP sunucu unavaiable olur ve yeniden başlatılması gerekir) çalışmıyor.

Ben yerine stdClass, çok karmaşık türleri için sınıfları oluşturma çalıştı, ama çalışmıyor ettik.

Sorun nerede bilmiyorum. Sunucu yöneticileri bana yardımcı olamaz ve ben internet üzerinden herhangi sollution bulamadı. Ben biraz umutsuz hehe değilim.

Bana yardım eder misiniz? Eğer üç olguda (basit veri dizisi, yapı ve yapı dizisi) ile kod örnekleri sağlayabilir? Teşekkürler!

1 Cevap

Ben WSDL 2.0 kullanarak bir. NET Sabun Server ile iletişimde bir PHP Soap Client ile benzer bir durum vardı. Sunucuya bilgileri geçerken, açıkça bir SoapVar nesnesi olarak değişken tanımlamak gerekir: İşte ben keşfettim bir şey. Yani yukarıdaki örnekte, bunu değiştirin:

$pCriteria->type = new SoapVar(1, XSD_INT, 'xsd:int');

Dizisi geçirerek essentialy Eğer SoapVars bir dizi geçmek, benzer:

$pCriteria->type = array(new SoapVar(1, XSD_INT, 'xsd:int'), new SoapVar(2, XSD_INT, 'xsd:int', new SoapVar(3, XSD_INT, 'xsd:int'));`enter code here`

Ayrıca, olası hataları üzerine bazı ek geri bildirim almak için SoapClient birçok yerleşik işlevleri kullanabilirsiniz.

$client->__getLastRequest() //To display the XML that you sent to the server
$client->__getLastResponse() //to display the XML that is sent in response to your request

Eğer beklenen WSDL formatında bir kopyasını alabilirsiniz Eğer neyin yanlış gittiğini belirlemek için yukarıdaki komutları yanıtı kullanabilirsiniz. Genellikle size SoapClient geçmek URL'den bu erişebilirsiniz. WSDL hizmetleri URL Yani, örneğin, http://example.com/webservices/wvrgroupservice.asmx?WSDL, http://example.com/webservices/wvrgroupservice.asmx işlevleri görüntülemek ve bu sunucudan XML beklenen girin.