【问题标题】:How can I serialize handling of a .net web service?如何序列化 .net Web 服务的处理?
【发布时间】:2011-08-03 17:24:34
【问题描述】:

我正计划使用 .net Web 服务来批处理数据库记录。 Web 服务请求来自 SQL Server 存储过程,该过程由 SQL Server 代理每分钟调用一次。我只希望一次运行一批,因为这里的重点是避免服务器过载。

有没有一种很好的方法来序列化请求,或者如果已经有一个正在进行中的请求可能会拒绝?

我正在考虑让 Web 服务实例将一个标志写入数据库,以便后续 Web 服务实例在启动时可以读取。如果它已经设置,那么 Web 服务将返回而不做任何事情。一个安全的防范措施可能是,如果设置标志后已经过了十分钟,那么设置标志的 Web 服务实例将被视为失败。

有什么想法吗?

干杯,伊恩。

【问题讨论】:

    标签: .net asp.net sql-server web-services batch-processing


    【解决方案1】:

    您可以在 Web 服务上使用静态属性来设置它何时运行,并且其他实例会检查它(在适当的锁定之后)并优雅地失败,如果是这样的话。这也可以考虑您的超时时间。

    但是没有更简单的方法可以做到这一点吗?您似乎在谈论从数据库到 Web 服务并再次返回到数据库,以及您希望每分钟运行的东西。有些事情似乎不太对劲。您是否有不能使用 Windows 服务甚至 Windows 任务计划程序的原因?

    【讨论】:

    • 感谢您的回复安德鲁。我一直在阅读您提到的其他两个选项。 Windows 服务的级别有点低,需要实现调度,这是一种重新发明轮子的情况,而 Windows 任务计划程序听起来不可靠,可能会导致弹出 CMD 窗口。是的,我的计划最终是从数据库到 Web 服务再返回,但最初使用数据库只是为了它的调度功能,所以我认为这有点牵强!
    • 我认为使用静态属性在网络农场场景中是行不通的。每台机器上不会有一个值的副本吗?事实上,我怀疑静态在一台机器上甚至是唯一的。并不是说那是基于很多! :)
    • 但这就是我的意思;为什么数据库要做一些事情只是为了启动一些事情,而这就是任务计划程序的用途。这一点都不可靠,而且根本没有理由必须打开命令窗口;它可以运行一个没有专门用于此类事情的接口的进程,并且它可以管理以前运行的实例,其复杂性比您似乎需要的要复杂得多。
    • 正确;静态属性在网络农场(甚至网络花园)场景中不起作用......因此,我对在数据库中来回(然后再回来)进出单个服务(任务计划程序)可以执行的操作的评论一站式照顾您。
    • “为什么数据库要做一些事情只是为了启动一些事情,而这正是任务调度程序的用途。” 因为数据库调度程序可能是一个更强大的调度程序。但是,如果尽管我阅读了糟糕的报告,任务计划程序仍然可以正常工作,那么我想我不妨使用它。如果它停止并发任务,那就更好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多