标签: spyne

有一个Spyne客户端的例子吗?

我正在尝试在我的服务器中使用spyne(http://spyne.io)和ZeroMQ和MsgPack.我已按照示例对服务器端进行编程,但我找不到任何帮助我了解如何编程客户端的示例.

我找到了类spyne.client.zeromq.ZeroMQClient,但我不知道它应该是它的构造函数的'app'参数.

先感谢您!

编辑:

(简化的)服务器端代码:

from spyne.application import Application
from spyne.protocol.msgpack import MessagePackRpc
from spyne.server.zeromq import ZeroMQServer
from spyne.service import ServiceBase
from spyne.decorator import srpc
from spyne.model.primitive import Unicode

class RadianteRPC(ServiceBase):    
    @srpc(_returns=Unicode)
    def whoiam():
        return "Hello I am Seldon!"

radiante_rpc = Application(
    [RadianteRPC],
    tns="radiante.rpc",
    in_protocol=MessagePackRpc(validator="soft"),
    out_protocol=MessagePackRpc()
)

s = ZeroMQServer(radiante_rpc, "tcp://127.0.0.1:5001")
s.serve_forever()
Run Code Online (Sandbox Code Playgroud)

python zeromq msgpack spyne

6
推荐指数
1
解决办法
2436
查看次数

从 Spyne 响应变量中删除命名空间

根据特定的 WSDL 实现 WebService。客户端无法更改。正确处理来自客户端的请求,但客户端因变量中的命名空间而抱怨响应。

我想要什么(基于 WSDL 的 SoapUI 响应):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cal="http://callback.foo.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <cal:foo_statusResponse>
         <result>SUCCESS</result>
         <notify>Thanks!</notify>
      </cal:foo_statusResponse>
   </soapenv:Body>
</soapenv:Envelope>
Run Code Online (Sandbox Code Playgroud)

我得到的结果(tns:有关导致验证问题的变量的通知):

<senv:Envelope xmlns:tns="http://callback.foo.com/" xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
  <senv:Body>
    <tns:foo_statusResponse>
      <tns:result>SUCCESS</tns:result>
      <tns:notify>Thanks!</tns:notify>
    </tns:foo_statusResponse>
  </senv:Body>
</senv:Envelope>
Run Code Online (Sandbox Code Playgroud)

Java 客户端抛出此异常:

[com.sun.istack.SAXParseException2; 行号:2;列数:162;意外元素(uri:“ http://callback.foo.com/ ”,本地:“结果”)。预期元素为 <{}result>,<{}notify>]

实现片段:

class fooStatusRS(ComplexModel):
    result = Unicode()
    notify = Unicode()

class foo_callback(ServiceBase):
    @srpc(Unicode, Unicode, Unicode, Unicode, statusbarInfo, anotherResponse, 
            _out_header=None, 
            _out_variable_names=("result", "notify"), 
            _returns=(Unicode, Unicode), 
            _out_message_name="foo_statusResponse",
            _operation_name="foo_status_rq")
    def foo_status(foo_id, reply, ref, status, statusbar, another):
        if foo_id:
            print foo_id

        return fooStatusRS(result="SUCCESS", notify="Foo received!")
Run Code Online (Sandbox Code Playgroud)

python soap wsdl spyne

6
推荐指数
1
解决办法
2584
查看次数

Spyne 肥皂服务器的合格元素/属性形式和不合格形式

有没有办法在 Spyne 服务器上使用 elementFormDefault="unqualified" 服务器模式类型?现在我的所有试验都以方法响应结果结束:

<senv:Envelope xmlns:tns="http://test.com/remoteService/"
xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
<senv:Body>
    <tns:testResponse>
        <tns:status>ok</tns:status>
    </tns:testResponse>
</senv:Body>
Run Code Online (Sandbox Code Playgroud)

并生成带有“合格” elementFormDefault 的 wsdl 片段:

<xs:schema targetNamespace="http://test.com/remoteService/" elementFormDefault="qualified"></xs:schema>
Run Code Online (Sandbox Code Playgroud)

如何配置方法或参数模型以获得如下结果:

<senv:Envelope xmlns:tns="http://test.com/remoteService/"
xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
<senv:Body>
    <tns:testResponse>
        <status>ok<status>
    </tns:testResponse>
</senv:Body>
Run Code Online (Sandbox Code Playgroud)

我的目标是在子元素中生成结果:

<tns:status>ok</tns:status>
Run Code Online (Sandbox Code Playgroud)

将没有命名空间前缀出现 - 像这样:

<status>ok<status>
Run Code Online (Sandbox Code Playgroud)

soap python-2.7 spyne

5
推荐指数
2
解决办法
1007
查看次数

带有WSDL文件的Spyne Soap服务器

我正在尝试将Soap服务器从旧的PHP项目移植到Python.Django确切地说.在PHP中使用

$server = new SOAPServer("xyz.wsdl", ....
Run Code Online (Sandbox Code Playgroud)

据我所知

app = Application([HelloWorldService], 'spyne.examples.hello.http',
    in_protocol=Soap11(validator='lxml'),
    out_protocol=Soap11(),
)
Run Code Online (Sandbox Code Playgroud)

是使用Spyne启动Soap服务器的唯一方法,Spyne是否能够使用WSDL文件创建Soap服务器?

python soap wsdl spyne

5
推荐指数
1
解决办法
1132
查看次数

在python中部署多个Web服务,即多个wsdl文件

我正在使用Spyne基于此示例在python中创建Web服务.但是,我的所有服务都合并到一个位于的wsdl文件中http://localhost:8000/?wsdl.我正在寻找另一种方法来在单个wsdl文件中单独部署每个Web服务,例如 http://localhost:8000/service1/?wsdlhttp://localhost:8000/service2?wsdl

python wsdl web-services spyne

4
推荐指数
1
解决办法
661
查看次数

如何在Django中使用Spyne的基本身份验证?

如何在Django中使用Spyne的基本身份验证?我尝试了以下但它不起作用.我可以很好地查看WSDL页面文件,但每当我真正尝试将SayHello称为Web服务时,我都会收到403 FORBIDDEN响应.我相信403与CSRF有关,但csrf_exempt不应该让我解决这个问题吗?BTW,logged_in_or_basicauth来自这个片段:http://djangosnippets.org/snippets/243/.

class CapsWebService(ServiceBase):
    @rpc(String, Integer, _returns=Iterable(String))
    def SayHello(ctx, name, times):
        for i in xrange(times):
            yield 'Hello, %s' % name

caps_web_service = csrf_exempt(DjangoApplication(Application(
    [CapsWebService], 'solutions.sfcs', in_protocol=Soap11(), out_protocol=Soap11(), interface=Wsdl11(),
)))

@logged_in_or_basicauth()
def foo_view(request):
    logger.debug('views.foo_view()')
    return caps_web_service(request)
Run Code Online (Sandbox Code Playgroud)

django basic-authentication spyne

3
推荐指数
1
解决办法
1380
查看次数

spyne SOAP Web 服务中的多个命名空间

我正在尝试使用 Spyne 框架和此示例代码部分在 python3 中托管 SOAP 服务:

class HelloWorldService(ServiceBase):
    @srpc(Unicode, Integer, _returns=Iterable(Unicode))
    def say_hello(name, times):
        for i in range(times):
            yield 'Hello, %s' % name
application = Application([HelloWorldService],
    tns='spyne.examples.hello',
    in_protocol=Soap11(),
    out_protocol=Soap11()
)
if __name__ == '__main__':
    # You can use any Wsgi server. Here, we chose
    # Python's built-in wsgi server but you're not
    # supposed to use it in production.
    from wsgiref.simple_server import make_server
    wsgi_app = WsgiApplication(application)
    server = make_server('0.0.0.0', 8000, wsgi_app)
    server.serve_forever()
Run Code Online (Sandbox Code Playgroud)

它可以工作,但它只使用一个命名空间,tns='spyne.examples.hello'.

我可以在这一行定义多个服务:

application = Application([HelloWorldService, …
Run Code Online (Sandbox Code Playgroud)

python soap spyne

3
推荐指数
1
解决办法
908
查看次数

在 Python 中,Spyne 有很多问题

好吧,这是我的 Python 代码:

\n\n
#!/usr/bin/env python\nfrom spyne import Application, rpc, ServiceBase, Unicode\nfrom lxml import etree\nfrom spyne.protocol.soap import Soap11\nfrom spyne.server.wsgi import WsgiApplication\n# Wsgi \xd1\x8d\xd1\x82\xd0\xbe Web server Getewap Interface - \xd1\x81\xd1\x82\xd0\xb0\xd0\xbd\xd0\xb4\xd0\xb0\xd1\x80 \xd0\xb2\xd0\xb7\xd0\xb0\xd0\xb8\xd0\xbc\xd0\xbe\xd0\xb4\xd0\xb5\xd0\xb9\xd1\x81\xd1\x82\xd0\xb2\xd0\xb8\xd1\x8f \xd1\x81 \xd0\xbf\xd0\xb8\xd1\x82\xd0\xbe\xd0\xbd \xd0\xbf\xd1\x80\xd0\xbe\xd0\xb3\xd1\x80\xd0\xb0\xd0\xbc\xd0\xbc\xd0\xbe\xd0\xb9 \xd0\xb8 \xd1\x81\xd0\xb5\xd1\x80\xd0\xb2\xd0\xb5\xd1\x80\xd0\xbe \xd0\xb3\xd0\xb4\xd0\xb5 \xd0\xbe\xd0\xbd \xd1\x80\xd0\xb0\xd0\xb1\xd0\xbe\xd1\x82\xd0\xb0\xd0\xb5\xd1\x82\n\nclass Soap(ServiceBase):\n    @rpc(Unicode, _return=Unicode)\n    def Insoap(ctx, words):\n        print("Connection detected: ", etree.tostring(ctx.in_document))\n        ww = str(words).capitalize()\n        return ww\n\napp = Application([Soap], tns=\'Capitalize\', in_protocol=Soap11(validator=\'lxml\'), out_protocol=Soap11())\napplication = WsgiApplication(app) # \xd0\x92\xd0\xb0\xd0\xb6\xd0\xbd\xd0\xb0 \xd0\xbd\xd0\xb0\xd0\xb7\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xb8\xd1\x8f \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb5\xd0\xbc\xd0\xb5\xd0\xbd\xd0\xbd\xd0\xbe\xd0\xb9, \xd0\xb8\xd0\xbd\xd0\xb0\xd1\x87\xd0\xb5 \xd1\x81\xd0\xb5\xd1\x80\xd0\xb2\xd0\xb5\xd1\x80 \xd0\xbd\xd0\xb5 \xd0\xbf\xd0\xbe\xd0\xb9\xd0\xbc\xd0\xb5\xd1\x82\n\n\nif __name__ == \'__main__\':\n    from wsgiref.simple_server import make_server\n    server = make_server(\'localhost\', 8002, application)\n …
Run Code Online (Sandbox Code Playgroud)

python spyne

3
推荐指数
1
解决办法
774
查看次数

spyne SOAP服务器的Hello world示例

我正在尝试几个不同的Python SOAP服务器库,我似乎无法让spyne的'hello world'示例工作:https: //github.com/arskom/spyne/blob/master/examples/ helloworld_soap.py

当我运行它时,它启动一个SOAP服务器,我可以在浏览器中成功查看WSDL http://localhost:7789/?wsdl.但是,当我尝试连接suds客户端时,我得到一个例外:

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from suds.client import Client
>>> c = Client('http://localhost:7789/?wsdl')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/acordiner/ve/local/lib/python2.7/site-packages/suds/client.py", line 112, in __init__
    self.wsdl = reader.open(url)
  File "/home/acordiner/ve/local/lib/python2.7/site-packages/suds/reader.py", line 152, in open
    d = self.fn(url, self.options)
  File "/home/acordiner/ve/local/lib/python2.7/site-packages/suds/wsdl.py", line 158, in __init__
    self.resolve()
  File "/home/acordiner/ve/local/lib/python2.7/site-packages/suds/wsdl.py", …
Run Code Online (Sandbox Code Playgroud)

python soap suds spyne

1
推荐指数
1
解决办法
3841
查看次数