0

次のコードのように定義された単純なxmlrpcサーバーを作成しましょう。

from SimpleXMLRPCServer import SimpleXMLRPCServer

def add(x,y):
    return x+y

server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(add, 'addthem')
server.register_function(add, 'add.numbers')
server.register_function(add, 'sum.two.numbers')
server.serve_forever()

経由で接続できます

import xmlrpclib
dev = xmlrpclib.ServerProxy("http://localhost:8000/RPC2")

オブジェクトを使用すると、サーバーdevの(単純化のために同じ)関数にアクセスできません。add

print dev.addthem(1,2)
print dev.add.numbers(1,2)
print dev.sum.two.numbers(1,2)

私の質問:それらの呼び出しの断片は何ですか?(私はdevのインスタンスだと思いますxmlrpclib.ServerProxy)とは何ですかsumdev.sum(関数?呼び出し可能?クラス?インスタンス?)には何がありますか?何twodev.sum.two...

たとえば、次の構文

print dev.add

エラーが発生します

xmlrpclib.Fault: <Fault 1: '<type \'exceptions.Exception\'>:method "add.__str__" is not supported'>

それはいつも何かを印刷するべきではありませんか?と他の部分 何ですか?dev.add

4

2 に答える 2

1

リクエストを「ログに記録」するために、(たとえば)クライアントにカスタムトランスポートを実装できます。

ドキュメントから(適応):

import xmlrpclib, httplib, gzip

class LogTransport(xmlrpclib.Transport):
    def send_request(self, connection, handler, request_body):
        # log here.
        print handler, request_body
        if (self.accept_gzip_encoding and gzip):
            connection.putrequest("POST", handler, skip_accept_encoding=True)
            connection.putheader("Accept-Encoding", "gzip")
        else:
            connection.putrequest("POST", handler)

p = LogTransport()
server = xmlrpclib.Server('http://time.xmlrpc.com/RPC2', transport=p)
print server.currentTime.getCurrentTime()

出力:

/RPC2 <?xml version='1.0'?>
<methodCall>
<methodName>currentTime.getCurrentTime</methodName>
<params>
</params>
</methodCall>

およびサーバーエラー(存在しないため)

于 2012-12-09T09:29:48.100 に答える
0

この場合、sum.two.numbersはサーバーで呼び出される関数にすぎません。この行では、 2つの引数を取る関数server.register_function(add, 'sum.two.numbers')にマップするようにそのメソッドを設定しています。addサーバーで使用可能なすべてのメソッドは、現在追加するようにマップされています。dev.addサーバー上でメソッドを実行するようにクライアントに指示しているだけaddです。サーバー上の実際の関数にマップaddしないため、使用できず、エラーがスローされます。

ロギングを追加するためにカスタマイズできるカスタムSimpleXMLRPCRequestHandlerを含むこの例を確認してください。

ロギングにまだ問題がある場合は、これを見てください:XML-RPCサーバーロギング

于 2012-12-09T09:48:10.250 に答える