RPC для Java App Engine на основе Java от клиента C # - PullRequest
0 голосов
/ 22 июня 2010

У меня много проблем с вызовом сервера Google App Engine на базе Java из клиента C #

Вот так выглядит мой код клиента:

 // C# Client
static void Main(string[] args)
{
  const string URL = "http://localhost:8888/googlewebapptest7/greet";
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
  request.Method = "POST";
  request.ContentType = "text/x-gwt-rpc; charset=utf-8";
  string content = "<?xml version='1.0'?><methodCall><methodName>greetServlet.GetName</methodName><params></params></methodCall>";
  byte[] contentBytes = UTF8Encoding.UTF8.GetBytes(content);
  request.ContentLength = contentBytes.Length;
  using (Stream stream = request.GetRequestStream())
  {
    stream.Write(contentBytes, 0, contentBytes.Length);
  }

  // get response
  WebResponse response = request.GetResponse();
  using (Stream responseStream = response.GetResponseStream())
  {
    string res = new StreamReader(responseStream).ReadToEnd();

    Console.WriteLine("response from server:");
    Console.WriteLine(res);
    Console.ReadKey();
  }     

Серверв основном веб-проект Google по умолчанию с дополнительным методом:

public String GetName() { return "HI!"; }

добавлено в GreetingServiceImpl.

Каждый раз, когда я запускаю свой клиент, я получаю следующее исключение с сервера: An IncompatibleRemoteServiceException was thrown while processing this call. com.google.gwt.user.client.rpc.IncompatibleRemoteServiceException: This application is out of date, please click the refresh button on your browser. ( Malformed or old RPC message received - expecting version 5 )

Я бы хотел сохранить его в виде простых HTTP-запросов.

Есть идеи, что происходит?

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

Как отметил Ник, вы пытаетесь эмулировать формат RPC GWT.Я тоже это попробовал:)

Тогда я выбрал другой подход.Я использовал Google Protocol Buffers в качестве кодировщика / декодера по HTTP (S).

Один из моих проектов - это настольное приложение, написанное на C #.На стороне сервера также C # .Net.Естественно, мы используем WCF в качестве транспорта.

Вы можете подключить буферы протокола к транспорту WCF.У вас будет одинаковая конфигурация интерфейса как для клиента C #, так и для сервера Java.Это очень удобно.

Я обновлю этот ответ примерами кода, когда буду менее занят работой.

0 голосов
/ 24 июня 2010

Я никогда не находил хороший способ использовать RPC на основе XML в Google App Engine. Вместо этого я нашел эту превосходную библиотеку JSON с обучающей программой:

http://werxltd.com/wp/portfolio/json-rpc/simple-java-json-rpc/

это работает очень хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...