python - Spyne 和 Django-silk 的请求后错误
问题描述
我已经在 Django 中使用 spyne-RPC 作为 SOAP 服务器。我已经安装了 django-silk 来监控请求。对于我的 GET 请求,它可以正常工作,但是当我使用 POST 时,我得到下面的错误和超时。如果我删除 django-silk 它可以正常工作。spyne 的 django.py 有一个问题
response = WsgiApplication.__call__(self, environ, start_response)
错误如下
Traceback (most recent call last):
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/spyne/server/django.py", line 89, in __call__
response = WsgiApplication.__call__(self, environ, start_response)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/spyne/server/wsgi.py", line 304, in __call__
return self.handle_rpc(req_env, start_response)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/spyne/server/wsgi.py", line 411, in handle_rpc
contexts = self.generate_contexts(initial_ctx, in_string_charset)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/spyne/server/_base.py", line 64, in generate_contexts
self.app.in_protocol.create_in_document(ctx, in_string_charset)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/spyne/protocol/soap/soap11.py", line 202, in create_in_document
charset)
File "/home/test/django/django-apps/venv-test/lib/python2.7/site-packages/spyne/protocol/soap/soap11.py", line 96, in _parse_xml_string
chunk = next(xml_string)
StopIteration
有任何想法吗?
解决方案
Probaby django-silk 在返回值中使用生成器,这不会为客户端留下任何数据。
我在文档中简要提到了这一点:http: //spyne.io/docs/2.10/manual/03_types.html#arrays
...返回值可以是生成器,除非将数据返回给客户端,否则不得使用。这对于例如自定义记录器来说很方便,因为它们不应该尝试记录返回值(因为这意味着消耗生成器)。
如果您可以以某种方式自己使用生成器并将其替换为具有相同数据的列表或元组,则它可以工作。
推荐阅读
- excel - 使用 VBA 宏将每个 Excel 工作表另存为带有介绍性选项卡的单独工作簿
- c# - UWP 应用程序:将图像从文件夹加载到画廊而不锁定 .Net Core 中的文件
- python - c++中的opencv convertTo和Python中的手动转换结果不同
- css - 液体逻辑 if/else
- sql - 逾期逾期 171 天 >=41 天的账户 >=41
- android - 如何使用 kotlin 在 android 应用程序中设置错误消息的时间延迟
- c# - 如何将 EF Core 影子属性的默认值添加到现有实体?
- firebase - 函数执行耗时 60027 毫秒,完成状态为:'timeout'
- sql - 在asp MVC View中显示非实体数据的最佳方法是什么
- php - Php Mailer(致命错误:允许的内存大小为 134217728 字节已用尽......)