PHP et pas de Savon action d'en-tête

Je suis en train d'appeler un service web à distance, au sein de mon entreprise. Pour les raisons que j'ai ne peut pas fournir l'URL du service web. Le service web a une fonction unique appelée getItemField. C'est un petit test que j'essaie de l'exécuter PHP contre, la description du service est comme suit:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://www.oracle.com/ws/MyFirstWebService" xmlns:intf="http://www.oracle.com/ws/MyFirstWebService" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns1="http://www.w3.org/1999/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.oracle.com/ws/MyFirstWebService">
<!--
WSDL created by Apache Axis version: 1.2alpha Built on Oct 23, 2007 (12:09:54 IST)
-->
<wsdl:types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.oracle.com/ws/MyFirstWebService">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<complexType name="ArrayOf_xsd_string">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
</restriction>
</complexContent>
</complexType>
</schema>
</wsdl:types>
<message name="getItemFieldRequest">
<part name="args" type="impl:ArrayOf_xsd_string"/>
</message>
<message name="getItemFieldResponse">
<part name="getItemFieldReturn" type="soapenc:string"/>
</message>
<portType name="MyFirstWebService">
<operation name="getItemField" parameterOrder="args">
<input message="impl:getItemFieldRequest" name="getItemFieldRequest"/>
<output message="impl:getItemFieldResponse" name="getItemFieldResponse"/>
</operation>
</portType>
<binding name="MyFirstWebServiceSoapBinding" type="impl:MyFirstWebService">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getItemField">
<wsdlsoap:operation soapAction=""/>
<input name="getItemFieldRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://first" use="encoded"/>
</input>
<output name="getItemFieldResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://www.oracle.com/ws/MyFirstWebService" use="encoded"/>
</output>
</operation>
</binding>
<service name="MyFirstWebServiceService">
<port binding="impl:MyFirstWebServiceSoapBinding" name="MyFirstWebService">
<wsdlsoap:address location="http://myWebsite.com/services/MyFirstWebService"/>
</port>
</service>
</definitions>

Je peux me connecter le service est très bien et imprimer le nom de la fonction et le type, mais quand j'essaie d'appeler une fonction-je obtenir " pas de SOAPAction en-tête de!' erreur. Mon code PHP pour appeler la fonction de service est comme suit:

$options = array(
//Dev
'soap_version'=>SOAP_1_2, 
'exceptions'=>true, 
'trace'=>1, 
'cache_wsdl'=>WSDL_CACHE_NONE,
'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
//Credentials
'login' => 'user', 
'password' => 'pass'
);        
//Connected successfully
$client = new SoapClient( "http://myWebsite.com/services/MyFirstWebService?wsdl", $options );
//Params
$params = array( '123456' );
//Options
$options = array( 'soapaction' => '""' );
//Call function (Both methods below throw the same 'no SOAPAction header!' error)
//$result = $client->getItemField( new SoapParam($params, "getItemFieldRequest") );
$result = $client->__soapCall( "getItemField", array('123456'), $options );

Basée sur la description du service, il ne semble pas avoir un soapaction défini. La ligne que je vois avec soapAction est <wsdlsoap:operation soapAction=""/>. J'ai essayé de spécifier un vide soapAction car il n'y a rien de défini, mais cela ne semble pas fonctionner. Est la définition de service web lui-même incomplète? Ou alors j'ai loupé un certain nombre de paramètres dans mon application côté client appel? Merci à l'avance.

Mise à JOUR:

Essayé de préciser le nom de la méthode que le savon d'action, mais htat n'a pas fonctionné.

    //Params
$params = array( '123456' );
//Options
$options = array( 'soapaction' => 'getItemField' );
//Call function (STILL THROWS 'no SOAPAction header!')
$result = $client->__soapCall( "getItemField", $params, $options );

Que suis-je censé faire si pas de soapAction est spécifié dans le fichier wsdl, c'est à dire s'il est réglé sur "".

Une mise à jour sur qui? Je suis confronté au même problème lorsque vous essayez de vous connecter via curl sur un webservice que je peux me connecter par le biais de Zend savon, donc je suppose que c'est lié à certaines options ou les en-têtes.
N'est-ce pas l'en-tête SOAPAction liées à l'en-tête HTTP? Vérifier oreillynet.com/xml/blog/2002/11/...

OriginalL'auteur kingrichard2005 | 2011-11-22