Веб-сервис в GAE, звонок с клиента C#
Я создал веб-приложение на Google App Engine, которое получает и устанавливает данные в хранилище данных, используя Python API, и оно работает нормально.
Теперь я хочу получить доступ к этим данным из клиентского приложения, написанного на C#, поэтому я думал о создании веб- службы в GAE для предоставления доступа к данным для моего приложения.
Я начал немного играть с ProtoRPC и создал "привет" веб-сервис, как в учебнике, и теперь я хочу вызвать этот веб-сервис из моего клиентского приложения на C#.
Я нашел Jayrock lib, который, кажется, делает эту работу; к сожалению, я не могу найти, как заставить это работать.
Вот мой код, основанный на примере 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#?
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
,
Обратите внимание, что хотя ProtoRPC взаимодействует через JSON, это не служба JSON-RPC. Используя JSON-RPC-клиент, вы, скорее всего, отправляете сообщения в неправильном формате.
Вы должны делать POST, чтобы http://localhost:8081/hello.hello
с телом запроса {"my_name": "Joe"}
, Убедитесь, что ваш клиент отправляет запросы в этом формате.