0

我有一个程序,它在某些操作后在表中插入原始数据。我想通过使用插入行中的信息在代码中调用 Web 服务来执行一些特殊任务。

我怎么能这样做?

从存储过程调用此 Web 服务是否是个好主意?还有哪些其他选择?

更多详细信息:实际上,我的 Web 应用程序中有一个操作需要很长时间才能完成,而且是非常耗时的操作。我不希望客户等到这个过程完成。这就是为什么我决定编写一个 Web 服务在后台执行此过程的原因。因此,我认为当收到客户端请求时,我将他的请求插入表中并调用 Web 服务来处理它可能是一个好主意。此外,我不想等到 Web 服务返回结果,所以我会通过报告从其结果中了解客户端。我不知道处理它的最佳解决方案是什么。

4

3 回答 3

1

从存储过程或其他数据库对象调用 web 服务绝不是一个好主意。您可以在执行插入并提交之后从代码中调用它。

于 2013-04-22T13:13:44.810 回答
1

我通常让自己远离表触发器(听起来你要为表使用插入触发器)。
我不知道你的具体情况,但你可以:

  • 在调用存储过程之前或之后调用 web 服务,这样数据层(存储过程)只处理数据,仅此而已。您的逻辑层将处理调用额外 Web 服务的逻辑。
  • 编写一个服务,它会定期读取一个表并通知 web 服务最新的修改。更混乱,但它更像你想要达到的效果。

可能有更多解决方案,但我需要更多关于你正在做什么的信息。
现在有点模糊:)

于 2013-04-22T12:40:13.027 回答
0

听起来的问题是,除非您在提交事务之前调用它,否则您不能保证将调用 Web 服务。但是,听起来 web 服务需要在提交后调用。在这种情况下,听起来您应该使用消息队列。您可以在数据库中构建一个,也可以使用现成的一个(http://aws.amazon.com/sqs/http://www.windowsazure.com/en-us/home/features/messaging/)。

步骤是:

  1. 将消息插入队列(成功后您可以返回呼叫,具体取决于您与呼叫者的合同是什么)
  2. 阅读留言
  3. 插入表格
  4. 调用网络服务
  5. 删除消息

缺点是您需要使操作(插入表并调用 Web 服务)具有幂等性。

于 2013-04-22T15:01:07.803 回答