以下是我的Python代码:
服务部分
class Test:
def hello():
return "Hello World"
服务器部分
import SOAPpy
from first_SOAP import *
host = "127.0.0.1"
port = 5551
SOAPpy.Config.debug = 1
server = SOAPpy.SOAPServer((host, port))
server.registerKWFunction(Test.hello)
print "Server Runing"
server.serve_forever(
客户端部分
import SOAPpy
SOAPpy.Config.debug = 1
server = SOAPpy.SOAPProxy("http://127.0.0.1:5551/")
print server.Test.hello()
这是我得到的错误:
*** Outgoing HTTP headers **********************************************
POST / HTTP/1.0
Host: 127.0.0.1:5551
User-agent: SOAPpy 0.12.0 (http://pywebsvcs.sf.net)
Content-type: text/xml; charset="UTF-8"
Content-length: 350
SOAPAction: "Test.hello"
************************************************************************
*** Outgoing SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
>
<SOAP-ENV:Body>
<Test.hello SOAP-ENC:root="1">
</Test.hello>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************
code= 500
msg= Internal Server Error
headers= Server: <a href="http://pywebsvcs.sf.net">SOAPpy 0.12.0</a> (Python 2.5.2)
Date: Mon, 27 Jul 2009 07:25:40 GMT
Content-type: text/xml; charset="UTF-8"
Content-length: 674
content-type= text/xml; charset="UTF-8"
data= <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
>
<SOAP-ENV:Body>
<SOAP-ENV:Fault SOAP-ENC:root="1">
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Method Not Found</faultstring>
<detail xsi:type="xsd:string">Test.hello : <type 'exceptions.KeyError'> None <traceback object at 0x9fbcb44></detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
*** Incoming HTTP headers **********************************************
HTTP/1.? 500 Internal Server Error
Server: <a href="http://pywebsvcs.sf.net">SOAPpy 0.12.0</a> (Python 2.5.2)
Date: Mon, 27 Jul 2009 07:25:40 GMT
Content-type: text/xml; charset="UTF-8"
Content-length: 674
************************************************************************
*** Incoming SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
>
<SOAP-ENV:Body>
<SOAP-ENV:Fault SOAP-ENC:root="1">
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Method Not Found</faultstring>
<detail xsi:type="xsd:string">Test.hello : <type 'exceptions.KeyError'> None <traceback object at 0x9fbcb44></detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************
<Fault SOAP-ENV:Client: Method Not Found: Test.hello : <type 'exceptions.KeyError'> None <traceback object at 0x9fbcb44>>
Traceback (most recent call last):
File "/home/rajaneesh/workspace/raju/src/call.py", line 4, in <module>
print server.Test.hello()
File "/var/lib/python-support/python2.5/SOAPpy/Client.py", line 470, in __call__
return self.__r_call(*args, **kw)
File "/var/lib/python-support/python2.5/SOAPpy/Client.py", line 492, in __r_call
self.__hd, self.__ma)
File "/var/lib/python-support/python2.5/SOAPpy/Client.py", line 406, in __call
raise p
SOAPpy.Types.faultType: <Fault SOAP-ENV:Client: Method Not Found: Test.hello : <type 'exceptions.KeyError'> None <traceback object at 0x9fbcb44>>
答案 0 :(得分:0)
你真的想让test()成为一个类方法吗?我建议你改变这样的代码。
class Test:
def hello(self):
return "Hello World"
然后你必须创建一个Test类的实例并注册:
server.registerObject(Test())
然后客户端可以像这样访问hello()方法:
print server.hello()