我正在使用基于 this example 的 Spyne 在 python 中创建 Web 服务.但是,我所有的服务都合并到一个位于 http://localhost:8000/?wsdl
的 wsdl 文件中。我正在寻找另一种方法在单个 wsdl 文件中分别部署每个 Web 服务,例如
http://localhost:8000/service1/?wsdl
和 http://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/