Получил ошибку при вызове метода soap с клиентом suds

Я написал сервер 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'

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


person Zeinab Abbasimazar    schedule 29.01.2019    source источник
comment
Можете ли вы также поставить трассировку со стороны сервера?   -  person Burak Arslan    schedule 29.01.2019
comment
@BurakArslan, спасибо за внимание. Я решил проблему.   -  person Zeinab Abbasimazar    schedule 29.01.2019


Ответы (1)


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

person Zeinab Abbasimazar    schedule 29.01.2019