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:soapenc=" 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 <[email protected]> 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: [email protected] <gmail%[email protected]>
_______________________________________________ Soap mailing list [email protected] http://mail.python.org/mailman/listinfo/soap
