1

XMLRPC サーバーからクライアントに任意の例外を渡そうとしています (両方の Python スクリプト、例外の種類は両側で定義されています)。ActiveState Recipesには、返された「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:」文字列を分割し、「ValueError」をValueError.__name__(allowed_errors = [ValueError, TypeError]上のリンクを参照) と比較します。

このようなすべての例外を渡すことは可能ですか。つまりException、(サーバーで発生した後) クライアント側で例外 (または他の基本クラスから派生) を自動的に発生させますか?

ActiveState スクリプトは機能しますが、スローされる可能性のあるすべての例外を登録したくはありません( にある必要がありますallowed_errors)。

(おまけの質問: この問題を適切に処理できる XMLRPC 以外のテクノロジはありますか? Pyro はありますか?)

4

1 に答える 1

2

allowed_errors次からリストを作成できます__builtins__

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

これはValueErrorTypeErrorOSError、 などの組み込み例外の一般的なケースを処理します。おそらく、PyYAML や pickle などのより高度な処理を行うこともできます。この場合、参照された例外が送信されると自動的に追跡されますが、これは悪意のある攻撃にさらされます。

クライアント上のサーバーから自動的に例外を発生させるようなクライアント/サーバーの透過性が必要な場合は、おそらく XML-RPC よりも Pyro の方が適しています。

于 2010-01-11T23:01:24.740 に答える