解决方法
例如,如果服务器是多线程的,并且业务逻辑部分是无状态的,那么在服务器上请求将不会覆盖,因为每个线程将调用一个函数并返回结果.
在客户端,最好的办法是让每个请求从不同的线程发送,以便该线程阻塞直到它得到响应,然后处理就可以了.
如果您有不同的设计,请描述一下.
更新:根据新信息,您可能需要查看以下内容:
http://weblogs.java.net/blog/2006/02/01/can-i-call-you-back-asynchronous-web-services
我很好奇你是如何或者是否正在进行异步webservice调用.一般来说,webservices似乎阻止了,但是如果你这么快就进行这些调用,那么我只能假设异步性.
因此,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,直到您取回所有内容为止.您可能需要在客户端跟踪已发送的数量以及已收到的数量.
这不是理想的,并且是一个非常粗略的草图,但希望它会给你一些工作.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。