2012-08-19 12 views
5

Próbuję przekazać obiekt jako parametr za pomocą RPyC od klienta do serwera. Ale serwer nie może uzyskać dostępu do obiektu i otrzymuję AttributeError.przekazywanie obiektu w rpyc kończy się niepowodzeniem

Kod serwera:

class AgentService(rpyc.Service): 
    def exposed_func(self, obj): 
    return obj.name 

kod klienta

self._conn = connect(agent_host, agent_port, config = {"allow_public_attrs" : True}) 
return self._conn.root.func(obj) 

returns: AttributeError: cannot access 'name'.

Używam RPyC usług i accoding na stronie internetowej, to powinno działać.

Wszelkie pomysły?

+3

David, dzięki za edycję - wygląda o wiele bardziej profesjonalnie ... – Ben

Odpowiedz

5

Konflikt konfiguracyjny należy dostosować po stronie klienta i po stronie serwera.

Wartość głównym, aby zmienić to allow_public_attrs : True jeśli tylko zmienne publiczne muszą być dostępne lub allow_all_attrs : True jeśli prywatne i chronione zmienne i metody muszą być dostępne (czyli te, które zaczynają się od „_”).

Po stronie klienta, kod połączenie jest napisane jak w pytaniu powyżej i na kodzie serwera następująco:

server = ThreadedServer(MyService, port = 12345, 
         protocol_config = {"allow_public_attrs" : True}) 

Aby uzyskać więcej informacji na temat wszystkich dostępnych opcji konfiguracyjnych, patrz:

http://rpyc.sourceforge.net/api/core_protocol.html