문제

XMLRPC 서버에서 클라이언트로 임의의 예외를 전달하려고합니다 (모두 Python 스크립트, 예외 유형은 양쪽에 정의됩니다). 모범적 인 클라이언트 측 구현이 있습니다 레시피를 활성화합니다 반환 된 "Faultstring"을 구문 분석하고, 알려진 예외 목록과 비교하고, 발견되면, 그 예외를 xmlrpclib.Fault).

XMLRPC 예외 응답의 예 :

<?xml version='1.0'?>
<methodResponse>
  <fault>
    <value>
      <struct>
        <member>
          <name>faultCode</name>
          <value>
            <int>1</int>
          </value>
        </member>
        <member>
          <name>faultString</name>
          <value>
            <string>ValueError:</string>
          </value>
        </member>
      </struct>
    </value>
  </fault>
</methodResponse>

ActiveState 레시피는 "ValueError :"String 및 "ValueError"를 ValueError.__name__ (들어있는 것 allowed_errors = [ValueError, TypeError], cf. 위의 링크).

통과 할 수 있습니까? 모두 이와 같은 예외는 예외를 자동으로 제기합니다 (파생 된 Exception 또는 다른 기본 클래스) 클라이언트 측 (서버에서 올린 후)?

ActiveState 스크립트는 작동하지만 모든 예외를 등록하고 싶지는 않습니다. ~할 수 있었다 던져야합니다 (들어 있어야합니다 allowed_errors).

(보너스 질문 :이 문제를 제대로 처리 할 수있는 XMLRPC 외에 다른 기술이 있습니까? 파이로?)

도움이 되었습니까?

해결책

당신은 채울 수 있습니다 allowed_errors 목록 __builtins__:

[exc for exc in __builtins__ if isinstance(exc, BaseException)]

이것은 내장 예외를 위해 공동 사례를 처리합니다. ValueError, TypeError, OSError, 등. 당신은 아마도 pyyaml과 Pickle과 같은 더 발전된 일을 할 수 있습니다. 여기서 참조 된 예외가 전송되는 모든 것을 자동으로 사냥하지만, 이는 악의적 인 공격으로 자신을 열어줍니다.

클라이언트의 서버에서 예외를 자동으로 제외하는 종류의 클라이언트/서버 투명성을 원한다면 Pyro는 아마도 XML-RPC보다 더 나은 선택 일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top