我在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#调用它?
答案 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
。