最近使用多线程同时调用一个Web Service,总是有很多调用报超时,代码类似于下面的代码(为了简化,我把调用Web Service改为使用HttpWebRequest访问一个网址,效果时一样的):
我循环调用100次,但是总是有几十次调用报超时,具体如下:
System.Net.WebException: 操作已超时。
at System.Net.HttpWebRequest.GetResponse()
at HttpRequestTest.HttpRequestTest.MakeWebRequest(Object obj) in g:\my documents\visual studio projects\httprequesttest\httprequesttest.cs:line 35
真的不知道为什么,难道Web Service就不能在多线程的环境下调用!
因为目前找不到原因,暂时放在首页,想向各位请教,明天就撤调,请手下留情,谢谢!
我循环调用100次,但是总是有几十次调用报超时,具体如下:
System.Net.WebException: 操作已超时。
at System.Net.HttpWebRequest.GetResponse()
at HttpRequestTest.HttpRequestTest.MakeWebRequest(Object obj) in g:\my documents\visual studio projects\httprequesttest\httprequesttest.cs:line 35
真的不知道为什么,难道Web Service就不能在多线程的环境下调用!
因为目前找不到原因,暂时放在首页,想向各位请教,明天就撤调,请手下留情,谢谢!
1
using System;
2
using System.Diagnostics;
3
using System.Net;
4
using System.Threading;
5![]()
6
namespace HttpRequestTest
7
{
8
/// <summary>
9
/// Class1 的摘要说明。
10
/// </summary>
11
class HttpRequestTest
12
{
13![]()
14
//[STAThread]
15
static void Main(string[] args)
16
{
17
for(int i = 0; i < 100; i++ )
18
{
19
ThreadPool.QueueUserWorkItem(new WaitCallback(MakeWebRequest),"http://www.163.com");
20
}
21
Console.ReadLine();
22
}
23![]()
24
private static void MakeWebRequest (object obj)
25
{
26
string url = obj as string;
27
HttpWebResponse res = null;
28
try
29
{
30
HttpWebRequest req = (HttpWebRequest)WebRequest.Create (url);
31
req.Timeout = 15000;
32![]()
33
Console.WriteLine ("\nConnecting to " + url + " ![]()
![]()
![]()
");
34![]()
35
res = (HttpWebResponse)req.GetResponse ();
36![]()
37
Console.WriteLine("[" + AppDomain.GetCurrentThreadId() + "] ContentLength:" + res.ContentLength);
38
Console.WriteLine ("Connected.\n");
39![]()
40![]()
41
}
42
catch (Exception e)
43
{
44
Console.WriteLine ("Source : " + e.Source);
45
Console.WriteLine ("Message : " + e.Message);
46
Console.WriteLine(e.ToString());
47
Debug.WriteLine(e.ToString());
48
//Console.WriteLine("StackTrace :" + e.StackTrace);
49
}
50
finally
51
{
52
if (res != null)
53
{
54
res.Close ();
55
}
56
}
57
}
58
}
59
}
60![]()
using System;2
using System.Diagnostics;3
using System.Net;4
using System.Threading;5

6
namespace HttpRequestTest7
{8
/// <summary>9
/// Class1 的摘要说明。10
/// </summary>11
class HttpRequestTest12
{13

14
//[STAThread]15
static void Main(string[] args)16
{17
for(int i = 0; i < 100; i++ )18
{19
ThreadPool.QueueUserWorkItem(new WaitCallback(MakeWebRequest),"http://www.163.com");20
}21
Console.ReadLine();22
}23

24
private static void MakeWebRequest (object obj)25
{26
string url = obj as string;27
HttpWebResponse res = null;28
try29
{30
HttpWebRequest req = (HttpWebRequest)WebRequest.Create (url);31
req.Timeout = 15000;32

33
Console.WriteLine ("\nConnecting to " + url + " 


");34

35
res = (HttpWebResponse)req.GetResponse ();36

37
Console.WriteLine("[" + AppDomain.GetCurrentThreadId() + "] ContentLength:" + res.ContentLength);38
Console.WriteLine ("Connected.\n");39

40

41
}42
catch (Exception e)43
{44
Console.WriteLine ("Source : " + e.Source);45
Console.WriteLine ("Message : " + e.Message);46
Console.WriteLine(e.ToString());47
Debug.WriteLine(e.ToString());48
//Console.WriteLine("StackTrace :" + e.StackTrace);49
}50
finally51
{52
if (res != null)53
{54
res.Close ();55
}56
}57
}58
}59
}60


浙公网安备 33010602011771号