sql server语言 - webrequest service vs local database search



我有一个运行多个线程的应用程序,其中过程的一部分涉及向 Web 服务发出 http post 请求,其中我提交的参数在数据库中检查它是否已经存在,如果不存在,则插入。

数据库本身托管在运行应用的同一服务器上。我们最初将其托管在不同的服务器上,但它崩溃了,硬件故障。并且无法处理我每秒发出的所有请求。

现在我在向服务发出请求时遇到服务器错误,并且想知道哪种方法更有效、更快......并且不易出错...

  1. 使用向服务发出请求的现有方法并解决此问题,或者
  2. 自己
  3. 在本地访问数据库并检查表格并自己进行插入,这显然会减慢该过程

试图避免这里的问题,设置服务的程序员说他已经完成了所有事情,我应该更多地间隔我的请求,但我仍然不明白为什么在移动之前突然出现主键违规错误,如果我发送一个参数已经存在于表中,我会收到一个设置的响应,而不是内部服务器错误。

Web 服务请求是异步的,因此您将无法解释 PK 冲突错误。有多种方法可以处理这种情况:

  1. 应更改 Web 服务托管代码,以处理以下情况:当存在 PK 时,它应返回与首次发送该请求时给出的相同响应。调用请求是分开的,并且位于不同的线程上,并且永远不会知道另一个请求已经插入了相同的值。WS 的全部意义在于,多个请求可以从任何地方同时传入。业务逻辑应处理它们同时进入的问题。

  2. 更改代码以直接访问数据库(如您所提到的)。这不会以任何方式使过程变慢(尽管预先涉及更改代码的工作),因为 WS 请求必须通过 HTTP 协议,而从您的代码中,您将通过代码提供的 ADO 或 OLEDB 提供程序直接访问。

  3. 您可能会将请求排队,然后一个接一个地点击,直到一个处理收到响应之前不要点击下一个请求。我不喜欢这样,因为它不可扩展 - 违背了 WS 的目的(但如果程序员不更改 WS 代码,您可能会陷入困境)

WS 编码器建议的解决方案是荒谬的。无法隔开请求,以免导致 PK 冲突。您无法知道哪些请求已入,或者哪些其他请求已在处理中。此外,间隔请求不会使整个应用程序可扩展 - 您的前端(或其他正在等待响应的东西)最终将等待。

最新更新