Веб-сервис в GAE, вызов с клиента C # - PullRequest
2 голосов
/ 07 мая 2011

Я создал веб-приложение на Google App Engine, которое получает и устанавливает данные в хранилище данных, используя Python API, и работает нормально.
Теперь я хочу получить доступ к этим данным из клиентского приложения, написанного на C #, поэтому я думал о создании webservice в 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 ]

1 голос
/ 07 мая 2011

Использование 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.

1 голос
/ 07 мая 2011

Обратите внимание, что хотя ProtoRPC взаимодействует через JSON, это не служба JSON-RPC .Используя JSON-RPC-клиент, вы, скорее всего, отправляете сообщения в неправильном формате.

Вы должны выполнить POST на http://localhost:8081/hello.hello с телом запроса {"my_name": "Joe"}.Убедитесь, что ваш клиент отправляет запросы в этом формате.

...