Я пытаюсь экспортировать инфраструктуру Ruby через XML-RPC. Однако у меня возникают некоторые проблемы при попытке вызвать метод из класса, не добавленного непосредственно в качестве обработчика на сервер XML-RPC. Пожалуйста, смотрите мой пример ниже:
У меня есть тестовый сервер Ruby XML-RPC следующим образом:
require "xmlrpc/server"
class ExampleBar
def bar()
return "hello world!"
end
end
class ExampleFoo
def foo()
return ExampleBar.new
end
def test()
return "test!"
end
end
s = XMLRPC::Server.new( 9090 )
s.add_introspection
s.add_handler( "example", ExampleFoo.new )
s.serve
И у меня есть тестовый Python XML-RPC-клиент следующим образом:
import xmlrpclib
s = xmlrpclib.Server( "http://127.0.0.1:9090/" )
print s.example.foo().bar()
Я бы ожидал, что клиент Python напечатает "Привет, мир!" так как он эквивалентен следующему рубиновому коду:
example = ExampleFoo.new
puts example.foo().bar()
Однако выдается ошибка: «xmlrpclib.ProtocolError: ».
print s.example.test () работает нормально.
Я не ожидаю, что новый объект ExampleBar пройдет по проводам, но я ожидаю, что он будет «кэширован» на стороне сервера, и последующий вызов bar () будет выполнен.
Может ли XML-RPC поддерживать такой вид использования или он слишком простой?
Так что я думаю, мой вопрос действительно таков; как я могу заставить это работать, если не с XML-RPC, а с?