Windows服务或WCF服务

时间:2012-10-12 13:39:19

标签: asp.net wcf windows-services

我需要实现简单的文件观察器实用程序。我决定在一个简单的Windows服务中实现它,它将在内部使用FileSystemWatcher。目的是监视给定的目录路径(或ftp),并在检查一些预定义逻辑后将文件复制到新文件进入的其他服务器

因为我正在使用.net 3.5;客户建议我使用WCF。我在WCF的经验很少。

我不确定如何创建WCF服务,它将像WindowsService一样运行,并且可以部署在Windows服务器上的服务中。

要成为一个未来主义者,最好是创建WCF服务而不是Windows服务,否则我应该坚持使用窗口服务。

5 个答案:

答案 0 :(得分:1)

Windows服务!= WCF

您无法创建充当Windows服务等功能的WCF服务。 WCF服务等待来自第三方的消息并对其进行操作,Windows服务是一个始终在后台运行的进程。 WCF尝试解决从服务接口中分离出通信机制(传输协议,如Tcp,Http,命名管道等)的问题。

文件监视器实用程序

虽然理论上可以在WCF中创建一个新的平面文件绑定,“可以”将其地址设置为文件系统位置,但在.NET框架中不存在。查看MSDN上的Custom Bindings文章,我不会立即明白如何构建文件系统绑定。这些是可用的定义传输选项:

  1. TCP
  2. HTTP
  3. HTTPS
  4. 命名管道(IPC)
  5. Peer-to-Peer(P2P)
  6. 消息队列(MSMQ)
  7. 定制
  8. 如果必须通过文件丢弃进行通信,那么WCF无法解决您的问题。

    WCF可能在哪里工作

    客户端可能意味着创建一个执行copy the file to some other server wherever new file comes in after checking some predefined logic的WCF端点,但您仍然希望有一个监视输入目录的FileWatcher的Windows服务。

    如果您有多个客户端需要能够执行相同的逻辑,然后将输出发送到另一个服务器,那么制作WCF服务可能是有意义的,否则此时就会过度设计。

答案 1 :(得分:0)

您应该选择最简单的选项,直到找到需要更改的方式,最简单的选项是Windows服务。

在这种情况下,有一个编码原则叫做YAGNI(你不需要它),因为在WCF服务中简单地包装一些内容除了为大多数情况添加不必要的复杂性之外什么都不做。简单地说,做最小的可行解决方案,并在您需要时延长。

PS。如果您正在使用FileSystemWatcher而不是网络共享,请注意它存在文档问题,您应该使用poll + FileSystemWatcher的组合。关于它的Stack Overflow有很多解释。

答案 2 :(得分:0)

在您的使用案例中,Windows服务更有意义,我认为这是更合适的解决方案。您需要一些始终运行并监视目录的内容,这正是Windows服务非常擅长的用例。

我会考虑与客户交谈并解释Windows服务是这种用例的更合适的解决方案。此外,Windows服务不是老帽子,他们在那里解决这些用例和WCF / Windows服务相互补充。

答案 3 :(得分:0)

两个功能在名称中都有服务,因为它们几乎没有任何共同点。

Windows服务在一台计算机上不断运行。

WCF服务是代码,而不是其他机器可以远程调用的代码。

答案 4 :(得分:0)

这完全取决于你需要做什么。 Windows服务和“WCF服务”几乎没有共同之处。

这里的问题是您是否需要HTTP端点。如果这样做,您甚至可以在Windows服务中托管WCF服务来提供。请记住,WCF仅用作应用程序之间的通信方式。

阅读你的描述,但似乎你不需要它。

WCF Service in a Managed Windows Service