Как разработать мыльный сервер с Symfony 2.8 - PullRequest
0 голосов
/ 05 ноября 2018

я пытаюсь написать мыльный сервер (включая создание wsdl) с моим symfony 2.8 и php 5.6.

Я пытаюсь использовать natif \ soap_server () И библиотеку NuSoap. я уже тестирую soapClient с другим wsdl и все в порядке.

Я хочу написать свой собственный и конкретный? Wsdl.

У меня есть SoapController.php в моем AppBundle: Это моя функция для записи файла wsdl. и его работа:

$class = "AppBundle\\Utils\\MySoapServer";
        $serviceURI = "http://myurl.com/";
        $wsdlGenerator = new \PHP2WSDL\PHPClass2WSDL($class, $serviceURI);
        // Generate the WSDL from the class adding only the public methods that have @soap annotation.
        $wsdlGenerator->generateWSDL(true);
        // Dump as string
        $wsdlXML = $wsdlGenerator->dump();
        // Or save as file
        $wsdlXML = $wsdlGenerator->save('assets/example.wsdl'); 
        exit()

;

Выходные данные - это файл example.wsdl, подобный этому:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://myurl.com/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="AppBundle.Utils.MySoapServer" targetNamespace="http://myurl.com/soap/">
   <types>
      <xsd:schema targetNamespace="http://myurl.com/soap/">
         <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/" />
      </xsd:schema>
   </types>
   <portType name="AppBundle.Utils.MySoapServerPort">
      <operation name="getMessage">
         <documentation>return message.</documentation>
         <input message="tns:getMessageIn" />
         <output message="tns:getMessageOut" />
      </operation>
      <operation name="addNumbers">
         <documentation>Adds two numbers.</documentation>
         <input message="tns:addNumbersIn" />
         <output message="tns:addNumbersOut" />
      </operation>
   </portType>
   <binding name="AppBundle.Utils.MySoapServerBinding" type="tns:AppBundle.Utils.MySoapServerPort">
      <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
      <operation name="getMessage">
         <soap:operation soapAction="http://myurl.com/soap/#getMessage" />
         <input>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://myurl.com/soap/" />
         </input>
         <output>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://myurl.com/soap/" />
         </output>
      </operation>
      <operation name="addNumbers">
         <soap:operation soapAction="http://myurl.com/soap/#addNumbers" />
         <input>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://myurl.com/soap/" />
         </input>
         <output>
            <soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://myurl.com/soap/" />
         </output>
      </operation>
   </binding>
   <service name="AppBundle.Utils.MySoapServerService">
      <port name="AppBundle.Utils.MySoapServerPort" binding="tns:AppBundle.Utils.MySoapServerBinding">
         <soap:address location="http://myurl.com/soap/" />
      </port>
   </service>
   <message name="getMessageIn" />
   <message name="getMessageOut">
      <part name="return" type="xsd:string" />
   </message>
   <message name="addNumbersIn">
      <part name="num1" type="xsd:anyType" />
      <part name="num2" type="xsd:anyType" />
   </message>
   <message name="addNumbersOut">
      <part name="return" type="xsd:float" />
   </message>
</definitions>

для информации, моя маршрутизация "soap /" нацелена на SoapServerAction в моем SoapController;

soap:
  path: /soap
  defaults: { _controller: AppBundle:Soap:SoapServer }

Теперь я предполагаю, что попытайтесь использовать его с моим SoapClientAction в моем SoapController

$wsdlTest = "http://myurl.com/assets/example.wsdl";
           // Config
           $client = new \nusoap_client($wsdlTest, TRUE);
           $w_Fdls = $client->call('getMessage');
           var_dump($client->getProxyClassCode());
           var_dump($w_Fdls);

С моим getProxyClassCode () я нахожу свой метод см. возврат из моего дампа var getproxyclasscode ()

string (545) "класс nusoap_proxy_1255706341 расширяет nusoap_client {// void function getMessage () {$ params = array (); вернуть $ this-> call ('getMessage', $ params, 'http://testuri.com', 'http://myurl.com/#getMessage');} // http://www.w3.org/2001/XMLSchema:anyType $ num1, http://www.w3.org/2001/XMLSchema:anyType $ num2 функция addNumbers ($ num1, $ num2) {$ params = array ('num1' => $ num1, 'num2' => $ Num2); вернуть $ this-> call ('addNumbers', $ params, 'http://testuri.com',' http://myurl.com/#addNumbers');}} "

но мои $client->call('getMessage') верните мне

BOOL (ложь)

Спасибо всем, кто найдет проблему со мной. Дайте мне знать, если вам нужна дополнительная информация

...