PythonWeb服务:使用ZSI从服务器返回故障

PythonWeb服务:使用ZSI从服务器返回故障,python,web-services,fault,zsi,Python,Web Services,Fault,Zsi,我对为web服务编写python客户机感兴趣,出于测试目的,拥有一个简单的存根服务器也是非常有趣的。我正在使用Python2.3和ZSI2.0 我的问题是,我无法从服务器返回异常 如果我在wsdl中引发用于soap错误类型的异常,我会得到TypeError“异常必须是类、实例或字符串(已弃用),而不是EmptyStringException_Def”。我认为这意味着fault对象不是Exception的子类,但以这种方式修改生成的代码并没有帮助——当然,不必修改生成的代码会更好:) 如果我将fa

我对为web服务编写python客户机感兴趣,出于测试目的,拥有一个简单的存根服务器也是非常有趣的。我正在使用Python2.3和ZSI2.0

我的问题是,我无法从服务器返回异常

如果我在wsdl中引发用于soap错误类型的异常,我会得到TypeError“异常必须是类、实例或字符串(已弃用),而不是EmptyStringException_Def”。我认为这意味着fault对象不是Exception的子类,但以这种方式修改生成的代码并没有帮助——当然,不必修改生成的代码会更好:)

如果我将fault对象作为响应的一部分返回,它将被忽略

我找不到任何关于ZSI中故障处理的文档。有什么提示吗

下面是一个非常简单的服务服务器的示例代码,该服务只有一个方法spellBackwards,如果输入字符串为空,则该方法应返回soap错误:

#!/usr/bin/env python
from ZSI.ServiceContainer import AsServer
from SpellBackwardsService_services_server import *
from SpellBackwardsService_services_types import *
class SpellBackwardsServiceImpl(SpellBackwardsService):
    def soap_spellBackwards(self, ps):
        response = SpellBackwardsService.soap_spellBackwards(self, ps)
        input = self.request._in
        if len(input) != 0:
            response._out = input[::-1]
        else:
            e = ns0.EmptyStringException_Def("fault")
            e._reason = "Empty input string"

            # The following just produces an empty return message:
            # response._fault = e

            # The following causes TypeError
            # raise e

        return response

AsServer(port=8666, services=[SpellBackwardsServiceImpl(),])

抱歉不能回答这个问题

我和ZSI斗争了一段时间


我现在用的是肥皂水:,一切都变得简单多了。

我在这本书中找到了答案,作者是Chris Hoobs,链接在下面:

5.4例外情况
一个棘手的问题是如何在服务器上生成故障。ZSI v2.0代码为 如果提供,这是不可能的

我认为这是正确的,因为论文是从项目主页链接的。
本文还建议了一种解决方法,即修补ZSI发行版中的Fault.py文件。

我测试了解决方案,它按照承诺工作;修补库是我可以接受的解决方案,因为我只需要生成一个用于测试目的的服务器(即,我不需要分发修补库)。

好的,我认为,将我指向另一个库是一个非常有效的答案:)谢谢。不管怎样,描述中说“Suds是一个用于消费Web服务的轻量级SOAP-python客户端”,它允许我也编写一个简单的服务器吗?不,恐怕它只是一个客户端。