在现代信息技术领域,客户端与服务器之间的稳定连接对于数据传输和业务流程至关重要。本文将介绍一个利用Windows服务和Web服务实现客户端PC与服务器连接的系统。该系统不仅能够处理网络问题,还能支持并行请求,从而提高数据处理的效率和可靠性。
该系统的构想源于作者在餐厅呼叫中心下单时遇到的网络问题。为了解决这些问题,作者提出了一种使用XML文件的方法,以避免网络问题并支持并行请求。
系统的核心操作依赖于Windows服务和Web服务。用户界面、监控和通知功能则通过Windows应用程序实现。系统在以下环境中进行了测试并表现良好:
系统的工作流程可以分为以下几个部分:
当在服务器1的[Send folder]中完成操作并释放文件后,服务器1尝试通过Web服务将数据发送到目标服务器。如果发送失败,数据将被发送到“重试系统”,该系统与基础系统并行工作。
重试系统会尝试发送数据n次,如果失败,则将数据发送到传真系统。如果传真系统也失败,数据将被转储到失败文件夹,并生成报告。
如果发送成功,客户端计算机上的Web服务将数据转储到客户端的[received folder]或服务器2的[received folder]。完成此操作后,客户端计算机上的文件监视器将获取[received folder]中接收到的文件,并执行相应的操作。
服务器2或客户端计算机将文件发送到[send folder]。Windows服务文件监视器捕获它,并尝试调用服务器1上的Web服务,就像在服务器1上执行的操作一样。当服务器1的Windows服务接收到服务器2通过Web服务发送的文件时,将根据接收到的数据执行相应的操作。
系统分为两个部分:
包括Windows应用程序,用于监控和通知。
监控应用程序用于控制Windows服务(停止/运行),监控客户端连接性(通过调用Web服务上的函数“是否连接”),并定义重试系统值、发送和接收文件夹路径、注册服务器(名称和IP)等配置。
通知系统内置于监控系统内,通过文件监视器在文件夹(通知)上捕获事件,然后通知用户。用户可以通过INI文件自定义通知,包括图像、延迟等。
以下是如何使用代码的简要说明:
C#
//
1) 在 winServiceAndWindowsInterface 应用程序中,重载了 Notify 以便于使用,它接受一个结构体,包含所有事件属性
例如:
//
创建结构体对象并填充事件信息
StructDisplayInfo inInfo = new StructDisplayInfo();
inInfo.initilize();
//
设置一些属性
inInfo.popupTitle = title; inInfo.popupPrifeInfo = prifeInfo;
//
选择类型(通知/警告/错误)
inInfo.TypeInt = (int) StructDisplayInfo.Typeenum.Notify;
//
实际显示
NotifyMe myNotify = new NotifyMe(inInfo);
要设置此项目,需要执行以下步骤:
该项目完全动态,特别是在检查所有服务器的状态时使用多线程,同时检查它们(不是顺序的)。还与服务器和Windows/Web服务进行交互,并在连接失败时控制和重试等。
作者正在考虑以下方面的改进: