【发布时间】:2010-10-18 20:31:49
【问题描述】:
我们有一个带有 SQL Server 2005 后端的 .NET 电子商务应用程序。新订单需要一定的“后处理”。这些任务包括发送电子邮件、创建文件、将文件上传到 FTP 服务器以及对 WCF 数据服务执行 CRUD 操作。执行所有这些任务的代码已经作为几个 .NET 类库存在。
我的团队正在争论的是将这段代码放在哪里。我编写了一个简单的 Windows 服务,它定期轮询数据库,并在检测到数据库中的新事务(基于标志)时,它会执行必要的操作并记录任何错误。已提出的替代方案是将触发处理的 SQLCLR INSERT 触发器。
我知道在 SQLCLR 中完成上述大部分任务(全部?)在技术上是可行的——我什至发现了许多文章解释了如何从 SQLCLR 中使用 Web 服务,显然人们正在这样做。但我仍然犹豫不决。 SQLCLR 曾经打算用于这种事情吗?如果没有,实际的缺点是什么?至于 SQLCLR 触发器相对于 Windows 服务的潜在好处,我只能看到一个:更少的数据库流量。我们预计最初的交易量很轻,因此 windows 服务会产生一些“浪费”的流量。但是服务和数据库在同一个盒子里,所以它甚至不影响网络,只影响内部服务器资源。
最后,第三种可能性是使用 SQLCLR 触发器在文件系统上保存一个简单的令牌,并使用 Windows 服务中的 FileSystemWatcher(而不是 Timer)来根据需要执行任务。
请分享您对这些不同方法的权衡取舍的想法,或提出更好的替代方案。
【问题讨论】:
-
我在 MSDN 杂志中找到了以下文章:bit.ly/cyxEbw。它很好地解决了 T-SQL 和 SQL CLR 之间的权衡问题,但不幸的是它并没有解决我的问题。
标签: .net sql-server windows-services wcf-data-services sqlclr