将C#(前端)连接到Apache/PHP/Python(后端)
概述:我们想要写一个C#的用户界面,用来选择我们网页应用程序中的某些部分。这是给一个特定的用户群体使用的(比如内部员工)。
我们的网页应用程序是用PHP和/或Python编写的,使用Apache作为网络服务器。
为什么要这样做?有时候,一个经过深思熟虑的本地Windows界面比在网页浏览器中受限于各种规则要有效得多。
问题:在使用HTTPS的情况下,C#和PHP/Python之间最好的沟通方式是什么?我主要是指数据的序列化和反序列化,以及各个语言中不同数据类型的转换。
理想情况下,我们希望在C#中有强类型的结构或对象可以使用,同时在PHP/Python中也有相应的数据结构来配合使用。代码生成器也可以。
我看过Apache Thrift,考虑过扩展我们内部的数据库,审查过谷歌的协议缓冲区等等…… Thrift看起来很有前景,但他们的文档非常简陋。
- 保持开发者的负担尽量小是非常重要的。
- 保持合理的性能,特别是在服务器端,是很重要的。
欢迎对XMLRPC、SOAP或其他相关技术的有用性发表看法。
有什么建议吗?
4 个回答
我用PHP的SOAP服务器和VB.Net客户端做过这个。一旦你把VB.Net/C#客户端连接到服务器(也就是WSDL文件的位置),C#会自动识别所有的功能和所有暴露的对象。这样编程就简单多了。
我还推荐使用NuSOAP,我觉得它更好用。你可以在这里找到它:http://sourceforge.net/projects/nusoap/
在你的情况下,使用网络服务听起来是最合适的选择。
我对PHP没有太多实际经验,但我在用Python做后端网页服务方面有不少经历,这些服务被各种语言和环境的前端客户端使用过。在我尝试过的技术中,SOAP给我的感觉最不好——太复杂了,负担太重。(在很久以前,我也试过Corba,当我尝试在不同语言的独立实现之间互操作时,感觉也差不多;-)
XML-RPC、JSON和协议缓冲区对我来说都很实用。
协议缓冲区是我们在谷歌通常使用的技术,我不太明白你觉得它们文档不够详细的地方——请问具体的问题,我会尽量帮助改善我们的文档,无论是官方的还是非官方的!它们的主要优点是传输时非常“紧凑”——开销最小,灵活性最大。JSON也很不错——不仅仅是因为在JavaScript客户端中使用方便;有时候我在不同语言之间的通信中也把它作为默认格式,即使根本没有用到JavaScript!
一旦你把网页应用设置好,可以发出(比如)协议缓冲区的数据,想要让它在请求时发出XML或JSON也并不难——只需在GET请求中加一个 ?outputformat=JSON 的参数,选择合适的输出序列化工具也非常简单(在Python中是这样,我相信在PHP中也是如此)。
在我看来,想要在你的C#端“获取强类型对象”最好是在你那边的C#层来完成。我没有直接的经验,但例如,我确实把接收协议缓冲区的功能封装成了C++中的工厂类,这样就能生成格式正确且静态类型的对象(或者在接收到的数据不符合语义时抛出异常);我知道对于JSON或XML也不会更难,我非常怀疑对于Java、C#、Python等语言来说,如果你有兴趣,也不会更难!