Exponer un Componente de Servicio como un servicio web

SCA para PHP puede generar WSDL desde anotaciones dentro de un componente de servicio, por lo que puede ser fácilmente implementado y expuesto como un servicio web. Para porporcionar a SCA la información que necesita para generar el WSDL, es necesario añadir la anotación @binding.soap bajo la anotación @service, y especificar los parámetros y devolver valores de los métodos usando las anotaciones @param y @return. Estas anotaciones serán leídas cuando el WSDL sea generado, y el orden y tipo de los parámetros determinará el contenido de la sección <schema> del WSDL.

SCA para PHP siempre genera WSDL document/literal envueltos para componentes que exponen un servicio web. Observe que esto no hace que los componentes dejen de consumir servicios web que no son componentes SCA y que estén documentados con WSDL escrito en un estilo diferente.

Los tipos escalares que puede usarse en la anotación @param son los cuatro tipos escalares comunes de PHP: boolean, integer, float y string. Simplemente se hacen corresponder con los tipos del esquema XML del mismo nombre en el WSDL. El ejemplo de abajo, que es una implementación trivial del servicio StockQuote que el componente ConvertedStockQuote llama, ilustra los tipos string y float.

Ejemplo #1 El servicio StockQuote

<?php

include "SCA/SCA.php";

/**
 * Implementación scaffold para un servicio web StockQuote remoto.
 *
 * @service
 * @binding.soap
 *
 */
class StockQuote {

    
/**
     * Obtener una cotización de la acción de una clave de pizarra dada.
     *
     * @param string $ticker La clave de pizarra.
     * @return float La cotización de la acción.
     */
    
function getQuote($ticker) {
        return 
80.9;
  }
}
?>

Se generará WSDL muy parecido a lo siguiente para este servicio (aunque con una ubicación para el servicio distinta de 'localhost', probablemente):

Ejemplo #2 WSDL generado

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xsi:type="tDefinitions"
    xmlns:tns2="http://StockQuote" xmlns:tns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns3="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetNamespace="http://StockQuote">
  <types>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
      targetNamespace="http://StockQuote">
      <xs:element name="getQuote">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="ticker" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="getQuoteResponse">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="getQuoteReturn" type="xs:float"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:schema>
  </types>

  <message name="getQuoteRequest">
    <part name="getQuoteRequest" element="tns2:getQuote"/>
  </message>
  <message name="getQuoteResponse">
    <part name="return" element="tns2:getQuoteResponse"/>
  </message>
  <portType name="StockQuotePortType">
    <operation name="getQuote">
      <input message="tns2:getQuoteRequest"/>
      <output message="tns2:getQuoteResponse"/>
    </operation>
  </portType>
  <binding name="StockQuoteBinding" type="tns2:StockQuotePortType">
    <operation name="getQuote">
      <input>
        <tns3:body xsi:type="tBody" use="literal"/>
      </input>
      <output>
        <tns3:body xsi:type="tBody" use="literal"/>
      </output>
      <tns3:operation xsi:type="tOperation" soapAction=""/>
    </operation>
    <tns3:binding xsi:type="tBinding" transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
  </binding>
  <service name="StockQuoteService">
    <port name="StockQuotePort" binding="tns2:StockQuoteBinding">
      <tns3:address xsi:type="tAddress" location="http://localhost/StockQuote/StockQuote.php"/>
    </port>
  </service>
</definitions>

<!-- this line identifies this file as WSDL generated by SCA for PHP. Do not remove -->