简体   繁体   中英

RPC to java based Google App Engine from C# Client

I'm having a lot of problems calling a Java based Google App Engine server from a C# client

This is how my client code looks like:

 // 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();
  }     

The server is basically the Google default web project with an additional method:

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

added to GreetingServiceImpl.

Everytime I run my client, I get the following exception from the server: 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 ) 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 )

I would like to keep it in plain HTTP requests.

Any idea what's going on?

As Nick pointed out you're trying to emulate GWT's RPC format. I tried that too :)

Then I took different approach. I used Google Protocol Buffers as encoder/decoder over HTTP(S).

One of my projects is desktop application written in C#. Server-side is also C#.Net. Naturally we use WCF as transport.

You can plug-in Protocol Buffers into WCF transport. You'll have same interface configuration both for C# client and Java server. It's very convenient.

I'll update this answer with code-samples when I'm less busy with work.

I never found a good way to use XML based RPC on the Google App Engine. Instead i found this excellent JSON library with tutorial:

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

it works very well!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM