Ошибка при вызове метода soap с клиентом suds - PullRequest
0 голосов
/ 29 января 2019

Я написал SOAP-сервер, используя Spyne библиотеку Python 2.7.Это мой сервер:

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'

Я установил несколько точек останова и понял, что запрос вообще не достигает сервера;что означает, что с моим запросом что-то не так, что не соответствует прототипам сервера.Но, насколько мне известно, клиентский запрос встретил определения;я что-то здесь упускаю?

1 Ответ

0 голосов
/ 29 января 2019

Ошибка исчезла после перезапуска сервера с новым портом прослушивания.Кажется, была какая-то проблема с кэшированием.

...