Symfony uygulamasında bir Soap sunucusu yapıyorum. İlk adım olarak benim "merhaba dünya" Sabun eylem ile bir denetleyici yarattı ve bunun için rotayı tanımlanmış: ŞimdiSihirli WSDL URI sorgu parametresiyle nasıl çalışır?
routing.yml
api.soap.foo
path: /soapapi/foo
defaults: { _controller: SoapBundle\Controller\FooController:bar }
methods: [GET, HEAD, POST]
FooController#bar(...)
protected function bar(Request $request)
{
$autodiscover = new AutoDiscover();
$autodiscover
->setClass(MyFooBarService::class)
->setUri('http://my-app.loc/soapapi/foo/bar')
->setServiceName('MyFooBarService')
;
$wsdl = $autodiscover->generate();
$wsdl->dump(__DIR__ . '/soapapi-foo-bar.wsdl');
$server = new SoapServer(__DIR__ . '/soapapi-foo-bar.wsdl');
$server->setObject($this->myFooBarService);
$response = new Response();
$response->headers->set('Content-Type', 'text/xml; charset=ISO-8859-1');
ob_start();
$server->handle();
$response->setContent(ob_get_clean());
return $response;
}
zaman http://my-app.loc/soapapi/foo/bar
'u bir tarayıcıda veya cURL kullanarak (HTTP GET ile) arayarak bir hata mesajı alıyorum:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Bad Request</faultstring>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
http://my-app.loc/soapapi/foo/bar?wsdl
'u aradığımda, aslında (üretilen) WSDL belgesini aldım. Niye ya? Hiçbir yerde tanımlamamıştım, bunun böyle çalışması gerekiyor. Neden ve nasıl (sihir) çalışır? Symfony'ye özgü sihir mi?
Bu davranış, [php-src] (https://github.com/php/php-src) adlı kullanıcının [soap uzantısı] [https://github.com/php/php-src/] adresinde bulunabilir. leke/ana/Ext/sabun/soap.C# L1550). Cevabınız doğru. – Joe
Teşekkürler @Joe Cevabı güncelledim. –