Google App Engine - GAE 中的 Web 服务,从 C# 客户端调用

本文关键字:客户端 调用 服务 Web Engine App GAE 中的 Google | 更新日期: 2023-09-27 17:55:08

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

我已经开始尝试 ProtoRPC,并按照教程中的方式构建了一个"hello"Web 服务,现在我想从我的 C# 客户端应用程序调用该 Web 服务。
我找到了 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# 调用它?

Google App Engine - GAE 中的 Web 服务,从 C# 客户端调用

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

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

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