Web Service多线程调用!!(100分)

  • 主题发起人 主题发起人 maoyihua
  • 开始时间 开始时间
M

maoyihua

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大侠,Delphi写的Web Service可以使用多线程调用吗?
如果可以的话,要怎么实现呢?
如果不可以的话,为什么呢?
 
为什么没有人可以回答这个问题啊??
是不是太难啦??
 
Web Service 应该有服务面和客户面 2 个方面,请问您指的是哪一面?
客户面的话是指一个客户实行线程调用还是多个客户在进行请求操作?
服务面的话,您的多线程是指一个请求还是指请求以外的执行?
 
我的问题是指一个客户实行线程调用时好像不能实现多线程调用,好像只有2个线程可以同时调用,多于2个就要等待前两个线程处理完成后才能继续处理接下来的线程啦,这是为什么啊?
 
哎呀,这里没办法贴图,最好有个流程示意图就好了。因为看不清一个客户如何利用线程来
对同一个服务进行调用,通常的理解,每个线程都会被服务当做一次新的请求来处理。我不
是很能想像您遇到的情况究竟发生了些什么,我也在学习这方面的知识,但想不出来您现在
遇到的现象的逻辑。
 
以下代码是在线程中调用Web Service的代码,
HTTPRIO1:=THTTPRIO.Create(nil);
HTTPRIO1.URL:=WebServiceUrl;
itest:=HTTPRIO1 as IFep_Service;
itest.ServiceTest;
itest:=nil;
以下代码是对应的Web Service中的函数的实现,
try
if not FileExists('D:/Input.txt') then
begin
AssignFile(tfError, 'D:/Input.txt');
ReWrite(tfError);
end else
begin
AssignFile(tfError, 'D:/Input.txt');
Append(tfError);
end;
Writeln(tfError,'开始调用时间:'+DateToStr(Date)+' '+TimeToStr(Time));
CloseFile(tfError);
except
end;
Sleep(60000);
try
if not FileExists('D:/Input.txt') then
begin
AssignFile(tfError, 'D:/Input.txt');
ReWrite(tfError);
end else
begin
AssignFile(tfError, 'D:/Input.txt');
Append(tfError);
end;
Writeln(tfError,'结束调用时间:'+DateToStr(Date)+' '+TimeToStr(Time));
CloseFile(tfError);
except
end;
虽然多个线程在代码调试时都进入了调用Web Service的部分,但是记录的文件中始终只能每次有两个线程的开始时间记录,然后要等等待的时间结束后才有下两个线程的调用的记录的开始时间,这是为什么呢?
等待结果中......
 
不知道。测试结果如下:
== 31 个线程同时启动的记录情况如下(Sleep(600))==
线程 29 开始调用时间:2004-3-30 18:30:19
线程 30 开始调用时间:2004-3-30 18:30:19
线程 29 结束调用时间:2004-3-30 18:30:20
线程 0 开始调用时间:2004-3-30 18:30:20
线程 30 结束调用时间:2004-3-30 18:30:20
线程 27 开始调用时间:2004-3-30 18:30:20
线程 0 结束调用时间:2004-3-30 18:30:20
线程 25 开始调用时间:2004-3-30 18:30:20
线程 27 结束调用时间:2004-3-30 18:30:20
线程 23 开始调用时间:2004-3-30 18:30:20
线程 25 结束调用时间:2004-3-30 18:30:21
线程 21 开始调用时间:2004-3-30 18:30:21
线程 23 结束调用时间:2004-3-30 18:30:21
线程 19 开始调用时间:2004-3-30 18:30:21
线程 21 结束调用时间:2004-3-30 18:30:21
线程 19 结束调用时间:2004-3-30 18:30:21
线程 17 开始调用时间:2004-3-30 18:30:21
线程 15 开始调用时间:2004-3-30 18:30:22
线程 17 结束调用时间:2004-3-30 18:30:22
线程 15 结束调用时间:2004-3-30 18:30:22
线程 13 开始调用时间:2004-3-30 18:30:22
线程 11 开始调用时间:2004-3-30 18:30:22
线程 13 结束调用时间:2004-3-30 18:30:23
线程 7 开始调用时间:2004-3-30 18:30:23
线程 9 开始调用时间:2004-3-30 18:30:23
线程 9 结束调用时间:2004-3-30 18:30:23
线程 5 开始调用时间:2004-3-30 18:30:23
线程 3 开始调用时间:2004-3-30 18:30:23
线程 3 结束调用时间:2004-3-30 18:30:24
线程 5 结束调用时间:2004-3-30 18:30:24
线程 28 开始调用时间:2004-3-30 18:30:24
线程 1 开始调用时间:2004-3-30 18:30:24
线程 1 结束调用时间:2004-3-30 18:30:25
线程 24 开始调用时间:2004-3-30 18:30:25
线程 26 开始调用时间:2004-3-30 18:30:25
线程 26 结束调用时间:2004-3-30 18:30:25
线程 22 开始调用时间:2004-3-30 18:30:25
线程 20 开始调用时间:2004-3-30 18:30:25
线程 22 结束调用时间:2004-3-30 18:30:26
线程 16 开始调用时间:2004-3-30 18:30:26
线程 18 开始调用时间:2004-3-30 18:30:26
线程 16 结束调用时间:2004-3-30 18:30:26
线程 12 开始调用时间:2004-3-30 18:30:27
线程 14 开始调用时间:2004-3-30 18:30:27
线程 14 结束调用时间:2004-3-30 18:30:27
线程 8 开始调用时间:2004-3-30 18:30:27
线程 10 开始调用时间:2004-3-30 18:30:27
线程 8 结束调用时间:2004-3-30 18:30:28
线程 4 开始调用时间:2004-3-30 18:30:28
线程 6 开始调用时间:2004-3-30 18:30:28
线程 4 结束调用时间:2004-3-30 18:30:28
线程 6 结束调用时间:2004-3-30 18:30:28
线程 2 开始调用时间:2004-3-30 18:30:28
线程 2 结束调用时间:2004-3-30 18:30:29

7、10、11、12、18、20、24、25、28 没有看见结束
环境 IIS6 Windows 2003 。
 
看了一下,觉得这个问题比较有新意,也许与客户端无关,是不是考虑下你的web server是不是连接时限制了session,每个session对应一次连接。具体也不是太清楚你服务器与客户端的连接方式。DCOM,CORBA,SOAP?
 
谢谢各位,我已经知道这个问题的解决方案了,还是谢谢大家啦!!
 
后退
顶部