Re: [SOAP] Strange 'Procedure Not Present' error

[email protected] (JohanV)
Newsgroups php.soap
Message-ID <[email protected]>
I had the same problem and in  turned out that it was caused by WSDL-Caching.
I used a faulty WSDL file that was cached. I changed the WSDL, but the soap
server object kept using the cached one, resulting in procedure not present
errors. After removing the cached WSDL (files in /tmp/wsdl-XX) everything
worked fine. 
For development, you can swith of the caching in the php.ini or use an
ini_set in your code.

Johan


Eric Gorr wrote:
> 
> Well, it suddenly started working. The only thing that I can think of  
> that might have caused it to start working now is that my machine  
> rebooted and perhaps reset something cached somewhere.  Does this  
> make sense? If it matters, I am running PHP 5.2 on MacOSX 10.4.8 with  
> Apache 1.3.
> 
> On Jan 24, 2007, at 2:29 PM, Eric Gorr wrote:
> 
>> The soap server code & WSDL file is below.
>> I am using the very useful MacOSX app http://ditchnet.org/ 
>> soapclient/ to test with - if I write PHP client code, I get the  
>> same 'not present' error.
>>
>> I am being told that my IsRegistered function is not present. The  
>> WSDL file validates.
>>
>> Any ideas on why this would be the case and what I can do to fix  
>> the problem?
>>
>> p.s. if you have any suggestions on improvements I can make to the  
>> WSDL file, I would be interested.
>>
>>
>> <?PHP
>> 	function IsRegistered( $serial_number ) {
>> 		$serialNumbers = array( "42" => 1 );
>>
>> 		if (isset( $serialNumbers[ $serial_number ] ) ) {
>> 		  return true;
>> 		}
>> 		else {
>> 		  throw new SoapFault( "Server", "Unknown serial number:  
>> '$serial_number'." );
>> 		}
>> 	  }
>>
>> 	function Register( $serial_number ) {
>> 		$serialNumbers = array( "42" => 1 );
>>
>> 		if (isset( $serialNumbers[ $serial_number ] ) ) {
>> 		  return true;
>> 		}
>> 		else {
>> 		  throw new SoapFault( "Server", "Failed To Register:  
>> '$serial_number'." );
>> 		}
>> 	}
>>
>> $server = new SoapServer( "protection.wsdl" );
>>
>> $server->addFunction( "IsRegistered" );
>> $server->addFunction( "Register" );
>>
>> $server->handle();
>> ?>
>>
>>
>>
>> <?xml version ='1.0' encoding ='UTF-8' ?>
>> <definitions name='Protection'
>>   targetNamespace='http://myCompany.net/Protection'
>>   xmlns:tns='http://myCompany.net/Protection'
>>   xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
>>   xmlns:xsd='http://www.w3.org/2001/XMLSchema'
>>   xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
>>   xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
>>   xmlns='http://schemas.xmlsoap.org/wsdl/'>
>>
>> <message name='submitRegistration'>
>>   <part name='serial_number' type='xsd:string'/>
>> </message>
>> <message name='getSubmitRegistrationResponse'>
>>   <part name='Result' type='xsd:boolean'/>
>> </message>
>>
>> <message name='checkRegistration'>
>>   <part name='serial_number' type='xsd:string'/>
>> </message>
>> <message name='getCheckRegistrationResponse'>
>>   <part name='Result' type='xsd:boolean'/>
>> </message>
>>
>> <portType name='ProtectionPortType'>
>>   <operation name='Register'>
>>     <input message='tns:submitRegistration'/>
>>     <output message='tns:getSubmitRegistrationResponse'/>
>>   </operation>
>>
>>   <operation name='IsRegistered'>
>>     <input message='tns:checkRegistration'/>
>>     <output message='tns:getCheckRegistrationResponse'/>
>>   </operation>
>> </portType>
>>
>> <binding name='ProtectionBinding' type='tns:ProtectionPortType'>
>>   <soap:binding style='rpc'
>>     transport='http://schemas.xmlsoap.org/soap/http'/>
>>
>>   <operation name='Register'>
>>     <soap:operation soapAction='urn:myCompany_protection#Register'/>
>>     <input>
>>       <soap:body use='encoded' namespace='urn:myCompany_protection'
>>         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
>>     </input>
>>     <output>
>>       <soap:body use='encoded' namespace='urn:myCompany_protection'
>>         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
>>     </output>
>>   </operation>
>>
>>   <operation name='IsRegistered'>
>>     <soap:operation  
>> soapAction='urn:myCompany_protection#IsRegistered'/>
>>     <input>
>>       <soap:body use='encoded' namespace='urn:myCompany_protection'
>>         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
>>     </input>
>>     <output>
>>       <soap:body use='encoded' namespace='urn:myCompany_protection'
>>         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
>>     </output>
>>   </operation>
>>
>> </binding>
>>
>> <service name='ProtectionService'>
>> <port name='ProtectionPort' binding='tns:ProtectionBinding'>
>> <soap:address location='http://localhost/~Eric/protection/ 
>> protectionSoapServer.php'/>
>> </port>
>> </service>
>>
>> </definitions>
>>
>> -- 
>> PHP Soap Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>>
> 
> 
> -- 
> PHP Soap Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Strange-%27Procedure-Not-Present%27-error-tf3084041.html#a13767119
Sent from the Php - Soap mailing list archive at Nabble.com.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.