如何实现.net 应用程序与网站的通信
How to implement .net application communication with a website
我和我的朋友们正在开发一个项目,目前的输入如下:
- 有一个类似 CRM 的网站,用 JSm 编写,有自己的数据库、身份验证和一切,托管在 *nix 系统上。
- 有一个控制取款机插入用户的计算机
- 有一个 .Net 应用程序,它是自动提款机驱动程序的包装器。
这是我们想要实现的:
- 用户在接入取款机的机器上安装.Net应用程序,并在网站上注册;
- 每当用户单击网站上的按钮时,与用户相关联的 .Net 应用程序将运行带参数的方法(基于来自网站的数据),与提款机交互(登记购买、打印支票等) ;
- 用户可以从另一台机器登录网站,而不是插入取款机的机器,并且仍然能够向 .Net 应用程序发送命令;
- 服务器和 .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。
我和我的朋友们正在开发一个项目,目前的输入如下:
- 有一个类似 CRM 的网站,用 JSm 编写,有自己的数据库、身份验证和一切,托管在 *nix 系统上。
- 有一个控制取款机插入用户的计算机
- 有一个 .Net 应用程序,它是自动提款机驱动程序的包装器。
这是我们想要实现的:
- 用户在接入取款机的机器上安装.Net应用程序,并在网站上注册;
- 每当用户单击网站上的按钮时,与用户相关联的 .Net 应用程序将运行带参数的方法(基于来自网站的数据),与提款机交互(登记购买、打印支票等) ;
- 用户可以从另一台机器登录网站,而不是插入取款机的机器,并且仍然能够向 .Net 应用程序发送命令;
- 服务器和 .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。