#38665 [Bgs]: SOAP calls constructor twice when returning "void"
| From: | jsgoupil@php.net | Date: | Tue, 12 Sep 2006 10:56:51 +0000 |
| Subject: | #38665 [Bgs]: SOAP calls constructor twice when returning "void" | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-102030@lists.php.net to get a copy of this message | ||
ID: 38665
User updated by: jsgoupil@php.net
Reported By: jsgoupil@php.net
Status: Bogus
Bug Type: SOAP related
Operating System: WinXP
PHP Version: 5.1.6
Assigned To: dmitry
New Comment:
Ok, it's good to know, I'll document it in
/phpdoc/en/reference/soap/functions/soap-soapserver-setpersistence.xml
Previous Comments:
------------------------------------------------------------------------
[2006-09-12 08:04:17] dmitry@php.net
SoapServer::setPersistence(SOAP_PERSISTENCE_SESSION) makes persistent
only object of given class, but not the class staic data. Use
"$this->v" instead of "self::$v" in your example and you will get that
you like.
------------------------------------------------------------------------
[2006-09-09 04:18:51] jsgoupil@php.net
ok, that works.
Now,
I set the SOAP_WAIT_ONE_WAY_CALLS into the client
and check the server now :
the test.txt contains :
Call Constructor
Call Method 2 VAL
Call Method 1
and should contain : Call Method 1 VAL at the end...
test.server.php:
http://paste.uni.cc/9943
test.client.php
http://paste.uni.cc/9944
test.wsdl
http://paste.uni.cc/9945
------------------------------------------------------------------------
[2006-08-31 11:01:31] dmitry@php.net
In your examle "getTest1" is one way operation, by default ext/soap
doesn't wait response from such operations. It just send request and
forget about it. As result client doesn't recives session id cookie and
cannot establish session.
As workaround you can wait for one way operation.
To do this you should use "feature" option in SoapClient constructor.
$clientSOAP = new SoapClient('test.wsdl',
array("features"=>SOAP_WAIT_ONE_WAY_CALLS));
As another workaround you can use two way operation first.
------------------------------------------------------------------------
[2006-08-31 08:26:38] tony2001@php.net
Assigned to the maintainer.
------------------------------------------------------------------------
[2006-08-31 07:59:41] jsgoupil@php.net
Description:
------------
I found a weird bug with SOAP/WSDL.
When calling a method which returns nothing (no output) at first time,
the second method will call the constructor of the class again even if
we are using the Persistence with SESSION.
Here 3 files:
- test.wsdl
- test.server.php
- test.client.php
You have to change the url at the end of the test.wsdl to test this
script
In the WSDL, the method "getTest1" returns nothing and "getTest2"
returns a string.
If you run the script test.client.php now, you will get a file test.txt
containing :
Call Constructor
Call Method 2
Call Method 1
Now, swap the rows
var_dump($clientSOAP->getTest2());
var_dump($clientSOAP->getTest1());
and now the test.txt contains :
Call Constructor
Call Method 1
Call Constructor
Call Method 2
Reproduce code:
---------------
test.server.php
http://pastebin.com/780399
test.client.php
http://pastebin.com/780404
test.wsdl
http://pastebin.com/780402
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=38665&edit=1