我有一个运行多个线程的应用程序,其中一部分进程涉及向Web服务发出http post请求,其中我提交的参数在数据库中被检查是否已存在,如果不存在则插入。
数据库本身托管在运行应用程序的同一台服务器上。我们最初将它托管在不同的服务器上,但它崩溃,硬件故障......并且无法处理我每秒发出的所有请求。
现在我在向服务发出请求时遇到服务器错误,并且想知道哪种方法更有效,更快......并且更不容易出错......
我试图在这里避免问题,设置服务的程序员说他已经完成了所有工作,我应该更多地提出我的请求,但我仍然不明白为什么突然间我得到主键移动之前的违规错误,如果我发送了表中已存在的参数,我将收到设置的响应,而不是内部服务器错误。
答案 0 :(得分:1)
Webservice请求是异步的,因此您无法解释PK违规错误。有各种方法来处理这种情况:
应更改Web服务托管代码以处理PK存在时应返回第一次发送请求时给出的相同响应的情况。调用请求是独立的,并且在不同的线程上,并且永远不会知道另一个请求已插入相同的值。 WS的重点在于,可以从任何地方同时进入多个请求。业务逻辑应该处理它们同时进入的问题。
更改您的代码以直接访问数据库(如您所述)。这不会以任何方式使进程变慢(尽管前期需要更改代码),因为WS请求必须通过HTTP协议,而从代码中,您将直接通过代码提供的ADO或OLEDB提供程序访问
你可能会排队你的请求,然后逐个点击,而不是点击下一个请求,直到一个处理收到响应。我不喜欢这个,因为它不可扩展 - 违背了WS的目的(但如果程序员不更改WS代码,你可能会遇到这种情况)
WS编码器提出的解决方案很荒谬。没有办法将您的请求分开,这样就不会导致PK违规。您无法知道哪些已经插入,或者其他请求已经在进行中。此外,间隔输出请求不会使整个应用程序可扩展 - 您的前端(或其他等待响应的其他内容)将最终等待。