创建服务或后台应用程序?

时间:2013-06-10 19:37:49

标签: c# windows windows-services

好的,所以我知道如何编写服务和后台应用程序,我正在寻找更多的一般意见,因为这是一个奇怪的用例,因为我无法找到这个例子在线给我指导。

基本上我遇到的问题是我有一个服务器(一个应用程序,而不是一个Web服务器),它包含我所有的应用程序逻辑,以及一组可以向服务器发送消息来执行操作的客户端。

显然,客户端是传统的UI应用程序。问题是服务器应该是什么......

它不需要GUI,当它启动时,机器上应该只有一个版本。另一方面,它应该只在至少有一个客户端运行,否则它应该关闭。

我可能会过度思考它,但是我应该将其作为第一个客户端实例化的服务或后台应用程序吗?

我引用的内容如下:Windows Service vs Windows Application - Best Practice

3 个答案:

答案 0 :(得分:2)

使用Windows服务。它将在您的服务器启动时启动并继续运行,直到服务器关闭。

没有客户时无需关闭。如果应用程序只是在套接字上等待新连接,那么它将占用非常少量的资源:套接字和一些内存。

此外,如果您关闭服务,当客户想要连接时,您将使用什么机制重新启动它?

答案 1 :(得分:1)

我自己遇到了类似的问题,我通过编写一个自助托管的Web API应用程序来解决它。

有关说明,请参阅我的回答here

它非常高效,与自托管WCF不同,它不会不时崩溃,它为您提供标准接口:HTTP,JSON(如果您愿意,还可以是XML)和(如果您需要它;您可以使用) REST。

答案 2 :(得分:0)

使用Windows服务,以便服务器始终在一致的上下文中运行。

配置服务,以便客户端可以根据需要启动它:

wchar_t sddl[] = L"D:"
    L"(A;;CCLCSWRPWPDTLOCRRC;;;SY)"           // default permissions for local system
    L"(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)"   // default permissions for administrators
    L"(A;;CCLCSWLOCRRC;;;AU)"                 // default permissions for authenticated users
    L"(A;;CCLCSWRPWPDTLOCRRC;;;PU)"           // default permissions for power users
    L"(A;;RP;;;IU)"                           // added permission: start service for interactive users
    ;

PSECURITY_DESCRIPTOR sd;

ConvertStringSecurityDescriptorToSecurityDescriptor(sddl, SDDL_REVISION_1, &sd, NULL);

SetServiceObjectSecurity(service, DACL_SECURITY_INFORMATION, sd);

您可能需要稍微调整ACL以满足您的精确需求。请注意,为简单起见,已排除错误检查。

客户可以使用StartService功能根据需要启动服务。