我已经使用python 2.7的Spyne
库编写了SOAP服务器。这是我的服务器:
import logging
import random
import string
import json
from spyne.decorator import rpc
from spyne.application import Application
from spyne.service import ServiceBase
from spyne.model.primitive import Integer, String, Long
from spyne.server.wsgi import WsgiApplication
from spyne.protocol.soap import Soap11
from wsgiref.simple_server import make_server
class merchantservicesSoap(ServiceBase):
@rpc(Integer, String, Long, _returns=String)
def CheckTransactionResult(ctx, merchantConfigurationID, encryptedCredentials, localInvoiceID):
return json.dumps(
{
"Result": 500,
"CardNumber": '-'.join([
''.join(random.sample(string.digits.replace('0', ''), 4)),
'00' + ''.join(random.sample(string.digits, 2)),
'0000',
''.join(random.sample(string.digits, 4))
]),
"RRN": ''.join(random.sample(string.digits.replace('0', ''), 8)) * 2,
"RefID": random.randint(10000, 500000),
"Amount": random.randint(10000, 500000),
"PayGateTranID": ''.join(random.sample(string.digits.replace('0', ''), 8)) * 2,
"SalesOrderID": localInvoiceID
}
)
application = Application(
[merchantservicesSoap],
tns='http://tempuri.org/',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11()
)
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('spyne.util').setLevel(logging.DEBUG)
wsgi_app = WsgiApplication(application)
server = make_server('0.0.0.0', 55555, wsgi_app)
server.serve_forever()
我也有一个客户端来调用其方法,但出现错误。这是我的客户:
import logging
from suds.client import Client
logging.basicConfig(level=logging.DEBUG)
logging.getLogger('spyne.client').setLevel(logging.DEBUG)
c = Client('http://127.0.0.1:55555/?wsdl')
print c.service.CheckTransactionResult(5, 'zizi', 8888)
这是错误:
Traceback (most recent call last):
File "client.py", line 9, in <module>
print c.service.CheckTransactionResult(5, 'zizi', 8888)
File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 542, in __call__
return client.invoke(args, kwargs)
File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 602, in invoke
result = self.send(soapenv)
File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 649, in send
result = self.failed(binding, e)
File "/usr/local/lib/python2.7/dist-packages/suds/client.py", line 702, in failed
r, p = binding.get_fault(reply)
File "/usr/local/lib/python2.7/dist-packages/suds/bindings/binding.py", line 265, in get_fault
raise WebFault(p, faultroot)
suds.WebFault: Server raised fault: 'Internal Error'
我已经设置了一些断点,我意识到请求根本无法到达服务器。这意味着我的请求有问题,不符合服务器原型。但是据我所知,客户的请求已经满足定义。我在这里想念东西吗?
答案 0 :(得分:0)
使用新的侦听端口重新启动服务器后,错误消失了。似乎存在一些缓存问题。