我可以使用WCF替换当前的Web服务和窗口服务组合吗?

时间:2010-04-22 22:13:44

标签: .net wcf windows-services web-services

我需要就我面临的情况提出一些建议。目前我负责改进的安排并不适合我,我觉得有更好的方法可以做到。我读的WCF越多,我就越觉得它可能就是我想要的。

现在,我有一个asp.net客户端,一个.net网络服务,一个Windows服务,一个ms sql数据库,以及一个用于将一组“项目”文件处理成一个最终文件的第三方应用程序。由于第三方应用程序一次只能处理一个“项目”,因此安排了Web服务,窗口服务和数据库的组合,以便为第三方应用程序创建作业队列管理器。

客户端将包含多个子文件的zip“项目”文件发送到Web服务。 Web服务向数据库添加新的“项目”行,生成唯一的作业ID。使用作业ID作为文件夹名称将zip文件扩展到服务器上的文件夹位置。然后,Web服务将作业ID返回给客户端。客户端将使用此id来轮询Web服务以获取所提交作业的状态。作业完成后,客户端将请求处理过的文件。

Windows服务每隔x分钟轮询一次数据库。如果存在新作业,该服务将提取最旧的作业并将其发送到第三方应用程序进行处理。如果处理成功,则窗口服务更新数据库中的项目行,从而标记作业已完成。窗口服务将继续处理数据库中的任何非完整作业,直到不再有。当它停止查找任何作业时,它将休眠x分钟,然后再次轮询数据库。

我不喜欢窗口服务必须轮询数据库的事实。如果只提交了一个作业,则客户端必须等待窗口服务进行轮询,然后等待处理“项目”。看起来WCF可以用于结合使用InstanceContextMode.Single和ConcurrencyMode.Multiple的Web和窗口服务。到目前为止,我一直无法找到任何可以指向正确方向的文章或例子。是否可以利用WCF以更好的方式完成当前安排的作业队列逻辑?与往常一样,任何帮助都不仅仅是值得赞赏的。

1 个答案:

答案 0 :(得分:0)

我知道,这不是你的问题的答案,但如果延迟(直到单个工作被处理)是你当前解决方案唯一的主要问题,那么为什么不简单地减少轮询间隔(例如10秒) ?

轮询是否存在问题,或者只是您不喜欢这种解决方案?