如何在Python(2.1版)中显示ZSI.ServiceProxy的进出SOAP消息?

0 投票
2 回答
791 浏览
提问于 2025-04-16 03:54

几个月前,我问过同样的问题,不过那时是关于旧版本的ZSI(如何显示ZSI.ServiceProxy在Python中发送和接收的SOAP消息?)。现在,在新的ZSI 2.1版本中没有了tacefile这个参数。我试着找新版本的文档,但没有成功。有没有人知道如何显示ZSI 2.1生成和接收的SOAP消息? 先谢谢大家了 :-)

2 个回答

1

我之前也遇到过这个问题。我的解决办法是修改ZSI自带的dispatch.py文件。

我为我的应用创建了一个记录日志的函数(logmessage),这个函数可以把SOAP消息存储到数据库里,然后在需要的地方调用这个函数。不过我不记得我用的ZSI版本了。不过你应该能在代码里很容易找到这些函数。我有大概的行号,因为我还做了一些其他的修改。

在你的网站包目录里的Dispatch.py文件中:

L156 - 记录SOAP响应

def _Dispatch(tons-of-args, **kw):
     #several lines of code edited here#
     #several lines of code edited here#
     #several lines of code edited here#

     sw = SoapWriter(nsdict=nsdict)
     sw.serialize(result, tc)
     logmessage( str(sw), 1, kw['request'].get_remote_host() ) #LOGGING HERE

L168 - 记录SOAP错误

def _ModPythonSendFault(f, **kw):
    logmessage( str(f.AsSOAP()), 1, kw['request'].get_remote_host() )  #LOGGING ADDED HERE
    _ModPythonSendXML(f.AsSOAP(), 500, **kw)

L277 - 记录请求

def AsHandler(request=None, modules=None, **kw):
    '''Dispatch from within ModPython.'''
    a = request.read(-1)
    logmessage( a, 0, request.get_remote_host() ) #LOGGING ADDED HERE
    ps = ParsedSoap(a)
    kw['request'] = request
    _Dispatch(ps, modules, _ModPythonSendXML, _ModPythonSendFault, **kw)
3

为了调试,我发现使用Wireshark来追踪TCP数据包是一个干扰更小的解决方案。它的显示效果如下:

alt text

撰写回答