【问题标题】:How to implement .net application communication with a website如何实现 .net 应用程序与网站的通信
【发布时间】:2015-05-23 21:22:13
【问题描述】:

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

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

这是我们想要实现的:

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

我的问题是“我们应该使用什么技术来实现这样的功能以及步骤是什么?”

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

我将不胜感激有关这种情况的任何建议或意见。谢谢

更新:

澄清:

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

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

【问题讨论】:

    标签: c# wcf web signalr activex


    【解决方案1】:

    我建议调查WCF。确保将 WCF 服务器配置为使用 SSL(可能是 2 路),并且它应该是相当安全的。我假设您知道或可以了解如何创建安全的 PKI 凭据/证书。

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

    那么:
    用户 Web 浏览器 —> Web 服务器 + SOAP 客户端 —> .NET 驱动程序应用程序 + WCF 服务器 —> Cash Machine

    首先,决定你的“服务契约”是什么(即你希望你的网络服务能够做什么),并为它创建一个接口:

    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

    【讨论】:

    • 嗨,埃里克。谢谢您的回答。我一直在研究 WCF,有些事情对我来说还不清楚。 WCF 可以在不使用 ASP 并且托管在 *nix 服务器上的网站上使用吗?该网站能否在另一台机器上调用服务,而不是它显示的那台机器?能否请您提供一些实施细节?谢谢
    • 为了向您提供更多信息,我需要了解一下您的端点是什么样的以及它所期待的消息类型。 WCF“通常”需要 SOAP 样式的消息,尽管您可以将其配置为使用纯 XML。我建议在您的服务器上实现一个 SOAP 端点。
    • @netaholic 您将无法在非 Windows 环境中托管 WCF 服务器。但是您应该能够使用来自 WCF 的消息。如果您能指定您在 CRM 中使用的技术(PHP、Java、nodejs 还是其他?)会很有帮助,因为这可能会影响您将获得的建议。
    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多