Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Service Web服务和来自同一客户端的多个请求_Service - Fatal编程技术网

Service Web服务和来自同一客户端的多个请求

Service Web服务和来自同一客户端的多个请求,service,Service,如果我有一个客户端应用程序一个接一个地向我的web服务发送请求,web服务是否能够处理每个请求,而不会因为新请求而覆盖以前的请求?我希望所有的请求都得到处理,而不是被另一个请求取代。我是否能够处理来自同一个客户端的多个请求?答案取决于您的体系结构 例如,如果服务器是多线程的,而业务逻辑部分是无状态的,那么在服务器上请求不会覆盖,因为每个线程都会调用一个函数并返回结果 在客户端,最好的办法是让每个请求都从不同的线程发送,这样线程就会阻塞,直到收到响应,然后处理才能正常进行 如果您有不同的设计,请描

如果我有一个客户端应用程序一个接一个地向我的web服务发送请求,web服务是否能够处理每个请求,而不会因为新请求而覆盖以前的请求?我希望所有的请求都得到处理,而不是被另一个请求取代。我是否能够处理来自同一个客户端的多个请求?答案取决于您的体系结构

例如,如果服务器是多线程的,而业务逻辑部分是无状态的,那么在服务器上请求不会覆盖,因为每个线程都会调用一个函数并返回结果

在客户端,最好的办法是让每个请求都从不同的线程发送,这样线程就会阻塞,直到收到响应,然后处理才能正常进行

如果您有不同的设计,请描述它

更新:根据新信息,您可能需要查看以下内容:

我很好奇您是如何或是否正在进行异步Web服务调用的。一般来说,Web服务似乎会阻塞,但如果调用速度太快,那么我只能假设是异步的

因此,Web服务可以将答案存储在服务器端,因此有一个有状态类可以根据IP地址将结果存储在字典中。然后客户机轮询答案,因此,理想情况下,如果您发送请求,您应该能够返回一系列答案作为响应。如果您已发送所有请求,但仍在等待更多响应,则进行轮询。同样,您应该能够获得一系列答案,减少浪费的带宽

更好的方法是让您的客户机也成为服务器,这样您就可以发送带有IP地址的请求:用于回调的端口,这样服务器就可以对客户机做出单向响应。但是,这更复杂,但它减少了带宽的浪费

更新2:此操作未经检查,因此可能存在错误:

@WebMethod
public ResponseModel[] AnswerQuestion(QuestionModel[] question) {
// Get the IP address of the client
  AnswerController ac = new AnswerController(question, ipaddress);
  return mypackage.myclass.StaticAnswers.GetAnswers(ipaddress);
  // return an array
}

@WebMethod
public ResponseModel[] GetAnswers() {
   return mypackage.myclass.StaticAnswers.GetAnswers(ipaddress);
}
好的,这应该是一个粗略的想法

AnswerController中没有任何假设。它应该知道执行该任务所需的一切,因为它将是无状态的,因此,它指的不是可以更改的全局变量,只有
const
静态变量

StaticAnswers类是静态的,只存储答案,查找为ipaddress,以提高速度

它将以适当的数组返回答案

发送完最后一个问题后,只需拨打电话
GetAnswers
,直到收到所有问题。您可能需要在客户端跟踪已发送的数量和已接收的数量


这并不理想,而且是一个非常粗略的草图,但希望它能给你一些帮助。

我不知道为什么另一个答案对于一个基本知识的简单问题如此之长,但答案是

每个请求都独立于其他请求,除非您专门将某种交叉编程到服务器中(例如,每个请求使用的静态交叉线程列表或更复杂的结构)


如果使用通过事件给出结果的异步模式,那么在客户端更容易遇到交叉-您需要确保将结果发送到正确的请求(通常通过提供一些令牌作为“自定义状态”变量来完成,您可以使用它来确定响应处理程序中的原始请求).

有关服务在服务器端执行的操作的更多详细信息/细节?您希望每个请求都有某种类型的请求id:当然,请求id的空间必须在客户端管理。客户端是多线程的,每个请求一个,或者它是如何发送的?由于web服务可以访问多个客户端并同时处理它们,我想知道web服务是否可以处理来自同一个客户端的多个请求,而不覆盖但处理所有请求。谢谢。这里有一个小例子。客户机问web服务:“1+1”是什么?然后在web服务完成并响应该请求之前,客户机问web服务:“3+4”是什么?基本上是同一个客户机一次问web服务大约100个问题(请求)。我希望web服务能够处理所有请求,尽管这些请求来自同一个客户端。更简单的说法是:多个请求同时从同一个客户端发送,希望web服务能够处理所有请求。web服务服务器应该是多线程的。您正在为服务器使用什么框架?在服务器端,重要的是webservice端点获取请求,将问题传递给无状态类进行处理,并且处理可以将其放入静态(有状态)应答类中。我只是不希望web服务从我的客户端获取请求,然后在发出请求后立即获取另一个请求,并说“哦,那么你想让我忘记第一个请求,转而处理这个新请求?”我想让它说“哦,另一个请求,我也会处理,不管你给我的还有多少。”“@Brandon-.asmx文件、WCF、.NET2.0@Webservice注释,或者Spring.NETWebServices?你用哪种方法?这是IIS还是其他Web服务器?