#c# #google-app-engine #jayrock #protorpc
#c# #google-app-engine #jayrock #protorpc
Вопрос:
Я создал веб-приложение в Google App Engine, которое получает и устанавливает данные в хранилище данных, используя Python API, и оно работает нормально.
Теперь я хочу получить доступ к этим данным из клиентского приложения, написанного на C #, поэтому я подумал о создании веб-сервиса в GAE для предоставления доступа к данным моему приложению.
Я начал немного играть с ProtoRPC и создал веб-сервис «hello», как в руководстве, и теперь я хочу вызвать этот веб-сервис из моего клиентского приложения C #.
Я нашел библиотеку Jayrock, которая, похоже, выполняет эту работу; к сожалению, я не могу найти, как заставить ее работать.
Вот мой код, основанный на примере JayrockRPCClient :
JsonRpcClient client = new JsonRpcClient();
client.Url = "http://localhost:8081/hello";
JsonObject p = new JsonObject { { "my_name", "Joe" } };
Console.WriteLine(client.Invoke("hello.hello", p));
Я всегда получаю Missing value error
.
Кто-нибудь может указать мне, что я делаю не так?
И в качестве другого вопроса, что вы думаете об этой архитектуре, поскольку есть более простой способ создать веб-сервис в GAE и вызвать его с C #?
Ответ №1:
Обратите внимание, что, хотя ProtoRPC обменивается данными через JSON, это не JSON-RPC сервис. Используя клиент JSON-RPC, вы, скорее всего, отправляете сообщения в неправильном формате.
Вы должны отправлять СООБЩЕНИЕ в http://localhost:8081/hello.hello
с телом запроса {"my_name": "Joe"}
. Убедитесь, что ваш клиент отправляет запросы в этом формате.
Ответ №2:
Используя WebClient
:
var uri = new Uri("http://localhost:8081/hello.hello");
var data = "{"my_name":"Joe"}";
var wc = new WebClient();
wc.Headers["Content-type"] = "application/json";
wc.Encoding = Encoding.UTF8;
var response = wc.UploadString(uri, data);
Для сериализации объектов вы можете использовать DataContractJsonSerializer
.