我正在构建一个与另一个充当TCP服务的EXE交互的WPF前端。我从来没有在今天看过这个......专注于前端......
然而,当我今天看到它时,它使用一个带有Thread.sleep(5000)的While true循环来保持它活着并能够处理来自GUI的请求。但是,这看起来很荒谬。当它处于休眠状态时,它无法响应请求,这会导致GUI在等待时挂起。
这不应该作为在IIS中运行的服务或作为窗口服务而受到重视吗?至少通过IIS管理控制台,它会更具响应性和可管理性吗?
由于 哈罗德
答案 0 :(得分:2)
它应该等待新的传入请求,而不是在循环中休眠。 IIS / ASP.NET可以为您执行此操作,但这可能过度,并可能会强制托管要求与其他要求冲突。假设您不想使用ASP.NET,C#中的服务应该继承自System.ServiceProcess.ServiceBase
,它具有您实现的虚拟函数,可以调用它们来启动和停止服务。这些应该启动和停止一个或多个执行所有处理的辅助线程。根据预期的连接类型,您可以通过不同的方式等待新请求。假设它是原始套接字,这样的处理不应该涉及休眠,因为它应该接受Socket.Accept
的套接字上的连接,然后使用Socket.Receive
等待指令(请求详细信息),然后立即处理请求并返回等待新输入。这些都不涉及睡眠,不仅可以快速响应,而且可以同时响应多个请求。