我想用Spyne + Twisted實現一個python SOAP服務器。Spyne +扭曲的SOAP服務器給出了405錯誤
下面是示例服務器代碼
import logging
logging.basicConfig(level=logging.DEBUG)
from spyne.application import Application
from spyne.decorator import srpc
from spyne.service import ServiceBase
from spyne.model.primitive import Integer
from spyne.model.primitive import Unicode
from spyne.model.complex import Iterable
from spyne.protocol.soap import Soap11
from spyne.server.twisted import TwistedWebResource
from twisted.internet import reactor
from twisted.web.server import Site
class HelloWorldService(ServiceBase):
@srpc(Unicode, Integer, _returns=Iterable(Unicode))
def say_hello(name, times):
for i in range(times):
yield 'Hello, %s' % name
application = Application([HelloWorldService],
tns='spyne.examples.hello',
in_protocol=Soap11(),
out_protocol=Soap11()
)
if __name__ == '__main__':
resource = TwistedWebResource(application)
site = Site(resource)
reactor.listenTCP(8000, site, interface='0.0.0.0')
reactor.run()
相當簡單。
下面是客戶端代碼:
from pysimplesoap.client import SoapClient
import sys
if __name__ == '__main__':
client = SoapClient(wsdl="http://{0}:{1}/?WSDL".format(sys.argv[1], sys.argv[2]))
response = client.add_job('black')
print 'result is ', response['add_jobResult']
和我運行客戶端python client.py localhost 8000
下面是客戶給我:
No handlers could be found for logger "pysimplesoap.simplexml"
Traceback (most recent call last):
File "client.py", line 22, in <module>
client = SoapClient(wsdl="http://{0}:{1}/?WSDL".format(sys.argv[1], sys.argv[2]))
File "/usr/local/lib/python2.7/dist-packages/PySimpleSOAP-1.10-py2.7.egg/pysimplesoap/client.py", line 133, in __init__
self.services = wsdl and self.wsdl_parse(wsdl, cache=cache)
File "/usr/local/lib/python2.7/dist-packages/PySimpleSOAP-1.10-py2.7.egg/pysimplesoap/client.py", line 471, in wsdl_parse
wsdl = SimpleXMLElement(xml, namespace=wsdl_uri)
File "/usr/local/lib/python2.7/dist-packages/PySimpleSOAP-1.10-py2.7.egg/pysimplesoap/simplexml.py", line 196, in __init__
self.__document = xml.dom.minidom.parseString(text)
File "/usr/lib/python2.7/xml/dom/minidom.py", line 1931, in parseString
return expatbuilder.parseString(string)
File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 940, in parseString
return builder.parseString(string)
File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 223, in parseString
parser.Parse(string, True)
xml.parsers.expat.ExpatError: syntax error: line 1, column 0
而且,瀏覽到http://localhost:8000/?WSDL
給出了這樣的:
405 Method Not Allowed
現在,我該怎麼辦? 在此先感謝
UPDATE:
即使瀏覽到「http:// localhost:8000 /」也會出現405 – vfsoraki
btw,爲什麼不使用泡沫? –
對不起,用什麼? – vfsoraki