2

我在 Google App Engine 上创建了一个 Web 应用程序,它使用 Python API 在数据存储中获取和设置数据,并且运行良好。
现在我想从用 C# 编写的客户端应用程序访问该数据,因此我正在考虑在 GAE 中创建一个Web服务来为我的应用程序提供对数据的访问。

我已经开始使用ProtoRPC,并在教程中构建了一个“hello”网络服务,现在我想从我的 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 中构建 Web 服务并从 C# 中调用它?

4

2 回答 2

1

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

您应该http://localhost:8081/hello.hello使用{"my_name": "Joe"}. 检查以确保您的客户端以这种格式发送请求。

于 2011-05-07T11:56:29.090 回答
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.

于 2011-05-07T15:20:18.180 回答