【问题标题】:Connecting C# (frontend) to an apache/php/python (backend)将 C#(前端)连接到 apache/php/python(后端)
【发布时间】:2009-06-21 04:17:05
【问题描述】:

概述:我们希望编写一个 C# 用户界面来选择我们的 Web 应用程序的一部分。这适用于非常受束缚的观众(例如,内部观众)。

我们的网络应用程序是用 PHP 和/或 Python 编写的,使用 Apache 作为网络服务器。

为什么?一个经过深思熟虑的原生 Windows 界面有时比使用 Web 浏览器强加的规则更有效。

问题:使用 HTTPS 在 C# 和 PHP/Python 之间进行通信的最佳方式是什么?我说的主要是每种语言中的各种数据类型的序列化/反序列化和转换。

理想情况下,我们应该在 C# 中使用强类型的结构或对象,并在 PHP/Python 中创建相应的数据结构以用于此目的。代码生成器很好。

我查看了Apache Thrift,考虑扩展我们的内部数据库,查看 Google 的协议缓冲区等...Thrift 看起来很有希望,但他们的文档非常稀少。

  1. 将开发人员开销降至最低至关重要。
  2. 保持合理的性能,尤其是在服务器端,这一点很重要。

欢迎对 XMLRPC、SOAP 或其他相关技术的实用性发表评论。

有什么建议吗?

【问题讨论】:

    标签: c# php python web-applications data-structures


    【解决方案1】:

    我没有真正的 PHP 经验,但我已经完成了大量的 Python 后端 Web 服务,这些服务由各种语言和环境的前端客户端使用。在我尝试过的技术中,SOAP 是唯一一种在我嘴里留下酸味的技术——太多的“仪式”/开销。 (在很久以前,我也尝试过 Corba,当我尝试在不同语言的独立实现之间进行互操作时,感觉并没有那么不同;-)。

    XML-RPC、JSON 和协议缓冲区,都证明对我非常有用。

    协议缓冲区是我们在 Google 中通常使用的,我不确定您是否发现关于它们的文档如此不足 - 请提出具体问题,我会看看我能做些什么来正式地改进我们的文档或非正式!它们的主要优点是它们在线路上非常“紧密”——最小的开销和最大的灵活性。 JSON 也很棒——而且不仅仅是为了便于在 Javascript 客户端中使用:有时我也将它用作不同语言之间通信的默认格式,而根本不涉及 JS!

    一旦您的 Web 应用设置为发出(例如)一个协议缓冲区,根本使其能够根据请求发出 XML 或 JSON 并不难 - 一个 ?outputformat=JSON 额外GET 请求中的参数就是它所需要的,选择正确的输出序列化器非常容易(在 Python 中,但我敢肯定,在 PHP 中也是如此)。

    在我看来,在您的 C# 端“获取强类型对象”是您最好在 C# 层中完成的工作。对此没有直接经验,但是,例如,我将 C++ 中协议缓冲区的接收包装到工厂类中,这些工厂类会吐出完美形式和静态类型的对象(或在传入数据不符合语义时引发异常)正确的);我知道 JSON 或 XML 不会更难,我非常怀疑 Java、C#、Python 或任何其他在现实世界中有用的语言是否会更难!-)

    【讨论】:

    • 感谢您的透彻观点。顺便说一句,我说“thrift”的文档很少——没有对 Protocol Buffers 发表评论。
    【解决方案2】:

    使用 Web 服务听起来是最适合您的方案的方式。

    【讨论】:

    • 什么?我投反对票?如果您有 C# Window 前端,那么从 SOAP 生成代理是轻而易举的事。
    【解决方案3】:

    我使用 PHP SOAP 服务器和 VB.Net 客户端完成了这项工作。一旦您将 VB.Net/C# 客户端连接到服务器(WSDL 文件的位置),C# 将自动检测所有公开的函数和所有对象。让编程变得更容易。

    我还建议使用我发现更实用的 NuSOAP。 http://sourceforge.net/projects/nusoap/

    【讨论】:

      【解决方案4】:

      我推荐 PHP/Java Bridge。不要让这个名字欺骗你。这可用于将 PHP 和 Python 连接到任何 ECMA-335 虚拟机(Java 和 C#)!

      http://php-java-bridge.sourceforge.net/pjb/

      回答您的评论:

      通信双向进行,JSR 223 接口可用于连接到正在运行的 PHP 服务器(Apache/IIS,FastCGI,...),以便 Java 组件可以调用 PHP 实例,PHP 脚本可以调用 CLR(例如 VB.NET、C#、COM)或基于 Java(例如 Java、KAWA、JRuby)的应用程序或将控制权转移回请求来自的环境。如果需要,可以将桥设置为自动启动 PHP 前端或启动 Java/.NET 后端。

      【讨论】:

      • 感谢您的指点。我的预期用途是将 C# 客户端应用程序连接到 PHP/或/Python 后端系统。这适用吗,还是从 php-java-bridge 的使用倒退?
      猜你喜欢
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多