Hi, Dieter:
Thanks for your replay.
1:By the url "
http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl" , we can
get the words :
<wsdl:definitions
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"xmlns:so...
http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="
http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://WebXml.com.cn/"
xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12=*"
http://schemas.xmlsoap.org/wsdl/soap12/*"xmlns:http="
http://schemas.xmlsoap.org/wsdl/http/" xmlns:wsdl="
http://schemas.xmlsoap.org/wsdl/"
targetNamespace="http://WebXml.com.cn/">
<wsdl:documentation
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
Maybe it's the fault of soap1.2
2: I once did a webservice server-side using suds. Most of time, they work
together well. While, sometimes, suds returns some message like the
exception mentioned above.
If idle, wish you have a look and give me some points. Thanks in advance.
#NOTE: the code can also be found in "
http://soaplib.github.com/soaplib/2_0/pages/helloworld.html"
# soaplib_server.py
import soaplib
from soaplib.core.service import soap
from soaplib.core.service import rpc, DefinitionBase
from soaplib.core.model.primitive import String, Integer
from soaplib.core.server import wsgi
from soaplib.core.model.clazz import Array
from soaplib.core import Application
class HelloWorldService(DefinitionBase):
@soap(String,Integer,_returns=Array(String))
def say_hello(self,name,times):
results = []
for i in range(0,times):
results.append('Hello, %s'%name)
return results
if __name__=='__main__':
print 'server begin running...'
try:
from wsgiref.simple_server import make_server
soap_application = Application([HelloWorldService], 'tns')
wsgi_application = wsgi.Application(soap_application)
server = make_server('localhost', 7789, wsgi_application)
server.serve_forever()
except ImportError:
print "Error: example server code requires Python >= 2.5"
# suds.py
import suds
def test_soaplib():
url = "http://localhost:7789/?wsdl"
client = suds.client.Client(url,cache=None)
print 'client', client
output = client.service.say_hello('jia',3)
print 'output', output
when you invoke sus.py , it takes much time and a long time later returns
the right result
”output (stringArray){
string[] =
"Hello, jia",
"Hello, jia",
"Hello, jia",
}
“
Sometimes, it returns exceptions as follows. most of time it return the
result successfully after 2 or 3 minutes
Traceback (most recent call last):
File "suds_client.py", line 774, in <module>
test_soaplib()
File "suds_client.py", line 627, in test_soaplib
client = suds.client.Client(url,cache=None)
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/client.py",
line 109, in __init__
self.wsdl = Definitions(url, options)
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/wsdl.py",
line 194, in __init__
self.build_schema()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/wsdl.py",
line 255, in build_schema
self.schema = container.load()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py",
line 90, in load
child.open_imports()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py",
line 277, in open_imports
imported = imp.open()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/sxbasic.py",
line 608, in open
result = self.download()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/sxbasic.py",
line 628, in download
return self.schema.instance(root, url)
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py",
line 367, in instance
return Schema(root, baseurl, self.options)
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py",
line 200, in __init__
self.open_imports()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/schema.py",
line 277, in open_imports
imported = imp.open()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/sxbasic.py",
line 608, in open
result = self.download()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/xsd/sxbasic.py",
line 626, in download
root = Parser(transport).parse(url=url).root()
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/sax/parser.py",
line 133, in parse
fp = self.transport.open(Request(url))
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/transport/https.py",
line 69, in open
return HttpTransport.open(self, request)
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/transport/http.py",
line 69, in open
fp = self.__open(u2request)
File
"/usr/local/lib/python2.6/dist-packages/suds-0.3.7-py2.6.egg/suds/transport/http.py",
line 107, in __open
return self.urlopener.open(u2request)
File "/usr/lib/python2.6/urllib2.py", line 391, in open
response = self._open(req, data)
File "/usr/lib/python2.6/urllib2.py", line 409, in _open
'_open', req)
File "/usr/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/lib/python2.6/urllib2.py", line 1161, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.6/urllib2.py", line 1134, in do_open
r = h.getresponse()
File "/usr/lib/python2.6/httplib.py", line 986, in getresponse
response.begin()
File "/usr/lib/python2.6/httplib.py", line 391, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.6/httplib.py", line 355, in _read_status
raise BadStatusLine(line)
# okay, the problem is why sometimes the client return the exception and
most of time return the correct results some minutes later?
Thanks for your spirit and time.
-- Jia Xiaolei
On Wed, Dec 7, 2011 at 3:17 PM, Dieter Maurer <dieter(a)handshake.de> wrote:
??? wrote at 2011-12-7 13:59 +0800:
> ...
>When I try to invoke a remote method getWeather() in the url "
>http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl", it
>failed. My code and the exception returned are as follows:
>
> ...
>Traceback (most recent call last):
> ...
> File "/usr/lib/python2.6/urllib2.py", line 1134, in do_open
> r = h.getresponse()
> File "/usr/lib/python2.6/httplib.py", line 986, in getresponse
> response.begin()
> File "/usr/lib/python2.6/httplib.py", line 391, in begin
> version, status, reason = self._read_status()
> File "/usr/lib/python2.6/httplib.py", line 355, in _read_status
> raise BadStatusLine(line)
The traceback indicates a bad reply from the remote web server:
the response in not a valid HTTP response.
This does not look like a client problem
(at least not completely a client problem).
Should the problem be reproducible, then the most likely cause would be
some error in the WSDL (bad port information) which causes the client
to speak to a non HTTP server.
WSDL is complexe. Especially, it allows to specify different sets of
ports. If the concrete WSDL uses multiple ports, clients may
choose different ports unless the port is specified explicitely in
the call. Maybe, "suds" is using a broken port definition while other
clients use another correct port definition.
Note also that "suds" does not (yet) support "SOAP 1.2" (unlike
the
Java/.Net soap clients). Check whether your WSDL defines
a "SOAP 1.1" port and in this case, use this one.
--
Dieter
--
NAME: 贾晓磊/Jia Xiaolei
MOBILE: 13011292217
QQ: 281304051
MICRO-BLOG:
http://weibo.com/2183890715
GMAIL: jiaxiaolei19871112(a)gmail.com <gmail%3Ajiaxiaolei19871112(a)gmail.com>