Веб-сервис в GAE, вызов с клиента C #

#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 .