网站和Windows服务之间的通信

时间:2011-12-12 20:29:09

标签: c# model-view-controller windows-services webserver communication

我有一个用c#(MVC)编写的网站和一个用c#编写的Windows服务。两者都在同一台机器上运行。想法是让他们共享同一个数据库。

Windows服务充当引擎,网站更像是前端,显示引擎执行的计算结果。通信由从Web服务器到Windows服务的数据很少的命令组成。很少有命令/秒。

他们沟通的好方法是什么?

3 个答案:

答案 0 :(得分:2)

一般来说,Windows方面最快的是LRPC。根据您的需要,WCF可能是一个真正的问题。我们使用Win32 LRPC + protobuffers从Web服务器到后台服务的吞吐量提高了约40倍。只取决于你的需要。

(见Benchmarking WCF compared to Protocol Buffers + RpcLibrary

protobuf-csharp-port拥有定义服务和消息所需的大部分内容。然后使用protobuf-csharp-rpcWin32 LRPC transport layer上提供邮件序列化。

一旦你过去在protobuffers中定义协议,这真的很容易。客户端/服务器上只需几行代码即可创建连接和代理类。

同样,这一切都取决于你正在寻找什么;然而,恕我直言,目前还没有一个更好的RPC架构用于.NET Framework。当然,我在我看来有偏见,但自2003年以来我们一直在使用这种变体,它只是起作用。

PS:如果您从头开始构建服务,可以查看我的Building a Windows Service Project Template指南。通过真实的事件记录,安装和命令行测试,它可以让您快速启动并运行。

答案 1 :(得分:0)

这完全取决于你想做什么。有许多选项可供选择:您可以在Windows服务中托管(宁静或非托管)Web服务,您可以使用远程处理或WCF等。

但这一切都始于一个问题:为什么你们两个都需要它们?什么阻止您将Windows服务的功能移动到Web App中?

答案 2 :(得分:0)

你可以随时做到这一点'反过来' - 让您的网站运行Web侦听器并让Windows服务连接到它。