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

最佳答案

Spyne 为此有一个 WsgiMounter 类:

from spyne.util.wsgi_wrapper import WsgiMounter

app1 = Application([SomeService], tns=tns,
        in_protocol=Soap11(), out_protocol=Soap11())
app2 = Application([SomeOtherService], tns=tns,
        in_protocol=Soap11(), out_protocol=Soap11())
wsgi_app = WsgiMounter({
    'app1': app1,
    'app2': app2,
})

现在,您可以将 wsgi_app 传递给您使用的 Wsgi 实现,就像传递 WsgiApplication 实例一样。

您的 Wsgi 实现也肯定会有类似的功能,您也可以使用它,例如你需要为根请求提供一些东西,而不是一个空的 404 请求。

可以在以下位置找到最新的完整工作示例:https://github.com/plq/spyne/blob/master/examples/multiple_protocols/server.py

请注意,您不能将一个 Service 类用于多个应用程序。如果你必须这样做,你可以这样做:
def SomeServiceFactory():
    class SomeService(ServiceBase):
        @rpc(Unicode, _returns=Unicode)
        def echo_string(ctx, string):
            return string
    return SomeService

并对每个 SomeServiceFactory() 实例使用 Application 调用。

例如
app1 = Application([SomeServiceFactory()], tns=tns,
        in_protocol=Soap11(), out_protocol=Soap11())
app2 = Application([SomeServiceFactory()], tns=tns,
        in_protocol=Soap11(), out_protocol=Soap11())

希望有帮助。

关于python - 在python中部署多个Web服务,即多个wsdl文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20275836/

10-16 01:59