如何实现.net 应用程序与网站的通信

How to implement .net application communication with a website

我和我的朋友们正在开发一个项目,目前的输入如下:

  1. 有一个类似 CRM 的网站,用 JSm 编写,有自己的数据库、身份验证和一切,托管在 *nix 系统上。
  2. 有一个控制取款机插入用户的计算机
  3. 有一个 .Net 应用程序,它是自动提款机驱动程序的包装器。

这是我们想要实现的:

  1. 用户在接入取款机的机器上安装.Net应用程序,并在网站上注册;
  2. 每当用户单击网站上的按钮时,与用户相关联的 .Net 应用程序将运行带参数的方法(基于来自网站的数据),与提款机交互(登记购买、打印支票等) ;
  3. 用户可以从另一台机器登录网站,而不是插入取款机的机器,并且仍然能够向 .Net 应用程序发送命令;
  4. 服务器和 .Net 应用程序之间的通信必须是安全的。

我的问题是"Using what technologies should we implement such functionality and what are the steps?"

到目前为止,我一直在研究 ActiveX、创建 HttpListener、使用 SignalR、使用自定义 URL 协议,一切都在我的脑海中混杂在一起,所以我有点困惑。

如有任何建议或意见,我将不胜感激。谢谢

更新:

说明:

该站点及其与数据库的通信是用 JavaScript、RubyOnRails 和 Python 编写的,并托管在 *nix 系统上。

通过应用程序轮询服务器以获取命令对我来说似乎不合适,因为用户希望对他的操作做出快速反应。 显然应用程序和服务器之间必须有一些连接,问题是什么样的连接以及如何实现它

我建议调查 WCF。确保将 WCF 服务器配置为使用 SSL(可能是双向的)并且它应该相当安全。我假设您知道或可以找出如何创建安全的 PKI credentials/certificates。

您可以通过打开与 WCF 服务器的连接(可能是 HTTP)并发出 SOAP(或普通的旧 XML)请求来让您的 Web 服务器响应某些请求,WCF 服务器解释并使用该请求与提款机互动。

那么:
用户网络浏览器 —> 网络服务器 + SOAP 客户端 —> .NET 驱动程序应用程序 + WCF 服务器 —> 提款机

首先,确定您的 "service contract" 是什么(即您希望您的 Web 服务能够做什么),并为其创建一个接口:

namespace MyCashMachine
{
        [ServiceContract(Namespace = "http://example.com/CashMachine")] //Note that this is the xmlns-namespace used in the WSDL/schema, not your endpoint.
        public interface ICashMachineService
        {
            [OperationContract]
            void GimmehMoniez(int howMuch);
            [OperationContract]
            boolean UHazMoniez();
            [OperationContract]
            int GetMoniezLeft();
        }
}

然后实施您的服务!

namespace MyCashMachine
{
    /* Make the machine spit money! */
    public class CashMachineService : ICashMachineService
    {
        public boolean GimmehMoniez(int howMuch)
        {
            try {
                CashMachine.eject(howMuch); //I don't know what methods your driver exposes...
                return true;
            } catch (CashMachineException cme) {
                return false;
            }
        }
    }
/* and so on */
}

然后在连接取款机的机器上配置WCF为运行。为此,请参阅数百个教程之一,或阅读 MSDN 文档。

Ruby 和 Python 中的库可帮助您处理 SOAP Web 界面,而无需执行诸如从头构建 SOAP 请求之类的操作。

您还可以配置 WCF 以使用 plain old XML。我建议通过一些教程来探索它是如何工作的。这是一个非常陡峭的学习曲线,但是一旦您的工具箱中有了这个工具,您就会发现在 .NET 中使用 Web 服务进行任何操作时它都是不可或缺的。

具有示例实现的精彩资源是 this post on REST/SOAP endpoints for WCF