2010-06-22 2 views
0

Пожалуйста, со мной. Это мой первый идти на App Engine Google :)RPC для Google App Engine от C# клиента

У меня много проблем, требующих, основанного на Java Google App Engine сервера от 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.

Everytime я бег моего клиента, я получаю следующее исключение из сервера: 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.

Любая идея, что происходит? -Любая помощь приветствуется!

+0

Похоже, вы пытаетесь подражать RPC-формату GWT. На чем вы основываетесь? Что заставляет вас думать, что этот конкретный URL-адрес будет принимать этот тип вызова RPC? –

+0

Я перезаписал protected java.lang.String readContent (javax.servlet.http.HttpServletRequest запрос) и может видеть входящий звонок. Я думал, что XML-RPC-запрос должен быть достаточным, но когда я ступаю по коду, похоже, что запрос должен начинаться с чего-то вроде 5 |? |? |? |? где ? должны быть целыми числами. Я еще не исследовал, что означают целые числа У вас есть идея, чтобы лучше подойти? – EsbenB

ответ

1

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

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

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

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

Я обновлю этот ответ с помощью образцов кода, когда я занят работой.

Смежные вопросы