GAE中的Web服务,来自C#客户端的呼叫

时间:2011-05-07 09:45:52

标签: c# google-app-engine jayrock protorpc

我在Google App Engine上创建了一个web应用程序,它使用Python API在数据存储区中获取和设置数据,并且工作正常。
现在我想从客户端应用程序访问这些数据,用C#编写,所以我想在GAE中创建一个 webservice 来提供对我的应用程序的数据访问。

我已经开始使用ProtoRPC,并在tutorial中构建了一个“hello”webservice,现在我想从我的C#客户端应用程序中调用该webservice。 我发现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中构建Web服务并从C#调用它?

2 个答案:

答案 0 :(得分:1)

请注意,虽然ProtoRPC通过JSON进行通信,但它不是JSON-RPC服务。通过使用JSON-RPC客户端,您很可能以错误的格式发送消息。

您应该使用http://localhost:8081/hello.hello的请求正文对{"my_name": "Joe"}进行POST。检查以确保您的客户端以此格式发送请求。

答案 1 :(得分:1)

使用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