Не определен обработчик для корневого URL:
https://github.com/plq/spyne/blob/b3b3f198b6148a498cdaeda9897307e0c5b1aac1/examples/django/rpctest/urls.py#L40
После переключения протокола ввода на HttpRpc и выполнения этого:
curl -D - localhost:8000/hello_world/
Youget:
<?xml version='1.0' encoding='UTF-8'?>
<soap11env:Envelope xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/">
<soap11env:Body>
<soap11env:Fault>
<faultcode>soap11env:Client.ResourceNotFound</faultcode>
<faultstring>Requested resource u'{spyne.examples.django}' not found</faultstring>
<faultactor></faultactor>
</soap11env:Fault>
</soap11env:Body></soap11env:Envelope>
Это потому, что вы не указали, какой метод вызывать.
HelloWorldService
в этом примере определяет функцию say_hello. Вы можете вызвать это.
curl -D - "localhost:8000/hello_world/say_hello"
Теперь это находит метод, но вы получаете трассировку (которую я не буду здесь включать) из-за того, что в вашу функцию передан неподтвержденный ввод.
Если вы передадите все параметры:
curl -D - "localhost:8000/hello_world/say_hello?times=5&name=Fatemeh"
Вы получите:
<?xml version='1.0' encoding='UTF-8'?>
<soap11env:Envelope xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="spyne.examples.django">
<soap11env:Body><tns:say_helloResponse>
<tns:say_helloResult>
<tns:string>Hello, Fatemeh</tns:string>
<tns:string>Hello, Fatemeh</tns:string>
<tns:string>Hello, Fatemeh</tns:string>
<tns:string>Hello, Fatemeh</tns:string>
<tns:string>Hello, Fatemeh</tns:string>
</tns:say_helloResult></tns:say_helloResponse></soap11env:Body></soap11env:Envelope>
Возможно, вы захотите включить проверку, чтобы избежать Server
исключений. Сначала мы добавляем Mandatory
маркеры к типам ввода:
from spyne import M
class HelloWorldService(Service):
@rpc(M(Unicode), M(Integer), _returns=Iterable(Unicode))
def say_hello(ctx, name, times):
for i in range(times):
yield 'Hello, %s' % name
Затем мы включаем мягкую проверку (единственную для HttpRpc
)
app = Application([HelloWorldService], 'spyne.examples.hello.http',
in_protocol=HttpRpc(validator='soft'),
out_protocol=Soap11(),
)
После перезапуска сервера и следующего:
curl -D - "localhost:8000/hello_world/say_hello"
Вы получаете:
<class 'spyne.model.complex.say_hello'>.name member must occur at least 1 times.
Надеюсь, это поможет!