2014-10-14 3 views
0

Я следую the link, чтобы попробовать jsonrpc2. У меня есть файл с именем hello.pyКак определить «метод» в jsonrpc?

def greeting(name): 
return dict(message="Hello, %s!" % name) 

Тогда я бегу

runjsonrpc2 hello 

Мой код

import jsonrpc2 
import requests 
import json 
url = "http://localhost:8080/" 
headers = {'content-type': 'application/json'} 
payload = { 
    "method": "greeting", 
    "params":{"name":"yy"}, 
    "jsonrpc": "2.0", 
    "id":1.0, 
} 

response = requests.post(url, data=json.dumps(payload), headers=headers).json() 

Сервер имеет ответ, но я получил

u'error': {u'code': -32601, u'message': u'Method Not Found'} 

Я определяю «метод»?

ответ

0

Короткий ответ первый:

Вы должны предварять имя модуля с именем метода:

payload = { 
    "method": "hello.greeting", 
    "params":{"name":"yy"}, 
    "jsonrpc": "2.0", 
    "id":1.0, 
} 

Длинный ответ:

Глядя в runjsonrpc2, что он делает с модулем, переданным в качестве аргумента, является сопоставление всех его методов с соответствующим вызываемым. Это делается в add_module методы:

def add_module(self, mod): 
    name = mod.__name__ 
    for k, v in ((k, v) for k, v in mod.__dict__.items() if not k.startswith('_') and callable(v)): 
     self.methods[name + '.' + k] = v # <-- here it is the key point 

И что делает его использование в качестве имени методы? Он использует имя модуля dot имя метода. Таким образом, вы получаете ошибку u'error': {u'code': -32601, u'message': u'Method Not Found'}, потому что фактически нет метода greeting, но вместо этого hello.greeting.

 Смежные вопросы

  • Нет связанных вопросов^_^