2013-06-18 2 views
1

Кажется, что любой, кроме брошенного на моем сервере WAMP, пойман Autobahn и отправлен клиенту. Есть две проблемы с этим: а) если что-то не так на сервере, оно должно быть зарегистрировано на сервере, поэтому оно может быть исправлено командой, и б) эти исключения потенциально могут быть очень откровенными (особенно исключения из ORM), и я не хочу, чтобы они были перенаправлены на злонамеренную третью сторону.Не отправлять исключения клиенту

Могу ли я предотвратить такое поведение? Если можно, есть ли способ явно отправить сообщения об ошибке, чтобы должен был отправить клиенту?

ответ

2

Обновленный ответ:

AutobahnPython больше не посылает tracebacks по умолчанию.

Когда вызывается процедура Callee, которая вызывает исключение, отправляется только исключение - не полная трассировка. Чтобы включить отправку трассбеков, установите traceback_app = True на Callee'sApplicationSession.


Устаревшие ответ: Следующий оригинальный ответ не распространяется только на WAMP v1 код в AutobahnPython, которая была устаревшей и удалена.

Последняя версия AutobahnPython с WAMP1 кодом был 0.8.15, который вы можете найти here и here.

Вы можете переопределить onAfterCallError крюк на классе вытекающей из autobahn.wamp.WampProtocol (см here или сгенерированные документы).

В своем переопределении вы можете выполнить свое собственное ведение журнала и/или изменение объекта ошибки, который является основой для возврата ошибки WAMP RPC, отправленной вызывающему.

+0

Именно то, что я искал! Для тех, кто интересуется, вот краткое сообщение в блоге, которое я написал о том, как я это сделал: http://blog.luhn.com/post/53384559656/stop-autobahn-from-forwarding-exceptions-to-client –

+0

Отлично! Btw: отключение отправки трассировки в RPC-ошибках также может быть выполнено путем установки 'includeTraceback = False' в экземпляре протокола (https://github.com/tavendo/AutobahnPython/blob/master/autobahn/autobahn/wamp.py# L506). Я согласен, вероятно, это должно быть отключено по умолчанию. – oberstet

+0

Спасибо. Я обновил свой пост, чтобы использовать его. –

1
try: 
    main() 
except Exception, e: 
    log(str(e)) 
+0

Мне нужно было бы это сделать в каждой функции RPC, которую я определяю. Я программист; Мне лень. Есть ли что-то, что я могу сделать один раз и забыть об этом? –

+0

Я не знаком с Autobahn. Другие серверы предлагают способ сделать это один раз для всех запросов. Однако реальная проблема заключается в том, что в коде генерируются исключения, без обработки ошибок. На самом деле должны быть конкретные блоки «за исключением» для любого кода, который может вызвать исключение, в комплекте с протоколированием. Это облегчит отладку, если вы знаете, где произошла ошибка. –

Смежные вопросы