我和我的朋友正在开发一个项目,以下是迄今为止的输入:
- 有一个类似CRM的网站,用JSm编写,有自己的DB、身份验证和一切,托管在*nix系统上
- 有一台控制提款机插入用户的电脑
- 有一个.Net应用程序,它是提款机驱动程序的包装器
以下是我们想要实现的:
- 用户在插入提款机的机器上安装.Net应用程序,并在网站上注册
- 每当用户点击网站上的按钮时,与user.Net相关的应用程序都会运行带有参数的方法(基于网站数据),与提款机交互(注册购买、打印支票等)
- 用户可以从另一台机器(而不是插入提款机的机器)登录网站,并且仍然可以向.Net应用程序发送命令
- 服务器和.Net应用程序之间的通信必须是安全的
我的问题是"我们应该使用什么技术来实现这样的功能,步骤是什么?"
到目前为止,我一直在研究ActiveX,创建HttpListener,使用SignalR,使用自定义URL协议,所有的事情都在我的脑海中混淆了,所以我有点困惑。
如有任何意见或建议,我将不胜感激。谢谢
更新:
澄清:
该网站及其与DB的通信是用JavaScript、RubyOnRails和Python编写的,并托管在*nix系统上。
对我来说,按应用程序轮询服务器以获取命令似乎不合适,因为用户希望对自己的操作做出快速反应。显然,应用程序和服务器之间必须有某种连接,问题是什么样的连接以及如何实现它
我建议研究WCF。请确保将WCF服务器配置为使用SSL(可能是双向),并且它应该是合理安全的。我假设您知道或能够了解如何创建安全的PKI凭据/证书。
您可以通过打开与WCF服务器的连接(可能是HTTP)并发出SOAP(或普通的旧XML)请求来让web服务器对某些请求做出响应,WCF服务器会解释该请求并使用该请求与提款机进行交互。
那么:
nbsp;用户网络浏览器—>web服务器+SOAP客户端—>。NET驱动程序应用程序+WCF服务器—>提款机
首先,决定你的"服务合同"是什么(也就是说,你希望你的网络服务能够做什么),并为它创建一个接口:
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配置为使用普通的旧XML。我建议您阅读一些教程,了解它的工作原理。这是一个非常陡峭的学习曲线,但一旦你的工具箱里有了这个工具,你就会发现它在用.NET.中的web服务做任何事情时都是必不可少的
关于WCF的REST/SOAP端点的这篇文章是一个很好的示例实现资源。