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

标签 python web-services wsdl spyne

我正在使用基于 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,
})

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

您的 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

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

例如

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/

相关文章:

java - WSDL 操作中的soapAction 属性为空

java - 当功能 "http://apache.org/xml/features/disallow-doctype-decl"设置为 true 时,不允许获取 DOCTYPE

python - Boto2 文件上传出现 ConnectionResetError

python - 用 python 绘制 3d 笛卡尔网格

python - 反编码 URL 参数

objective-c - 在 Objective C 中请求特定的 Web 服务(jSon 或 xml)响应类型

python - For循环不多次调用函数

python - Selenium Webdriver 等待 url?

wcf - WCF 提高了标准还是仅仅提高了复杂性级别?

c# - 如何在 asmx Web 服务(wsdl)中操作端口类型?