如何在Python(2.1版)中显示ZSI.ServiceProxy的进出SOAP消息?
几个月前,我问过同样的问题,不过那时是关于旧版本的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数据包是一个干扰更小的解决方案。它的显示效果如下: