我的一个项目使用了WebService技术,项目是这样的,我这边通过WebService向对方发出请求,并等待对方的处理结果;
可是对方总是会有无法返回的请求,致使我这里无限期的等待;我现在想通过超时退出的策略,强制对无返回的请求做退出的操作,可是我不知道该如何处理,希望各位给与帮助;这个问题困扰我有一段时间了,请大家帮忙吧;

解决方案 »

  1.   

    webservice,socket,等等这个需要交互的,都可以统统丢到线程里面去做,既不阻塞主界面,又可以随时结束
      

  2.   

    Web Service中保持ASP.net的状态
      

  3.   

    http://www.builder.com.cn/2007/0903/488227.shtml
      

  4.   

    TO: skylkj"webservice,socket,等等这个需要交互的,都可以统统丢到线程里面去做,既不阻塞主界面,又可以随时结束";你说的这个我也懂,只是我不太懂得如何去实际处理,能不能描述的详细一些呢?需要特别指出的是,我这里的服务端(即对方系统)是用Java写的Webservice;
    客户端是我这里的系统,用Delphi7写的;我如何才能够很好的控制延时处理的问题呢?
      

  5.   

    举个简单的例子,比如你原本的代码类似
    ……
    Webservice.DoSomeThing();
    ……
    使用现成就改成……
    StartThread();ThreadRuning:=true;while(ThreadRuning)
       begin
       sleep(100);
       Application.ProcessMessages();
       inc(TimerCounter);
       if (TimerCounter>50)   //5秒超时
          begin
          KillThread();
          ThreadRuning:=false;
          end;
       end;
    ……然后在线程函数里面执行……
    Webservice.DoSomeThing();
    ThreadRuning:=false;
    这样的话,如果5秒内webservice返回了,则线程会将ThreadRuning置为false,主线程的while在下一次循环时会退出。假如5秒内没有返回,则主线程执行KillThread()结束线程,同时设置ThreadRuning为false,退出while循环
    这只是一个简单的例子,具体如何用要看你代码的需求。delphi如何创建、结束线程,你可以在网上搜到。
    注意不要在线程里调用任何vcl控件的方法和属性,如果实在要调用,必须使用Synchronize方法