프로그래밍/C#
[C#] WebClient 타임아웃 설정
ss-pro
2022. 12. 15. 23:26
반응형
웹서비스사용시 WebClient를 사용하여 POST요청을 하여 서버에 응답 받을 수 있습니다. 이때 WebClient의 경우 TimeOut속성이 없기때문에 타임아웃을 사용하려면 상속을 받아서 처리해야합니다.
1. WebClientTester.cs소스파일
WebClient대신에 MyWebClient클래스를 호출합니다. WebClient는 TimeOut값이 없어서 MyWebClient 클래스에 타임아웃값을 설정 할 수 있게 WebClient를 상속받아서 TimeOut처리부를 구현합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
namespace WebClientTester
{
class Program
{
static void Main(string[] args)
{
string url = "http://127.0.0.1:44358/api/TodoItems";
string data = "{\"name\": \"walk dog\",\"isComplete\": true}";
MyWebClient webClient = new MyWebClient(5000);
webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
webClient.Encoding = UTF8Encoding.UTF8;
//UploadString호출시 MyWebClient.GetWebRequest메소드에서 타임아웃시간까지
//응답이 없으면 예외발생 string result = webClient.UploadString(url, data);
}
}
}
|
2. MyWebClient.cs소스파일
WebClient클래스를 상속을 받은 후 GetWebRequest메소드 호출의 경우도 override하여 TimeOut(밀리세컨드)값을 설정합니다. 설정된 타임아웃이 지나면
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
namespace WebClientTester
{
class MyWebClient : WebClient
{
int mTimeOut;
public MyWebClient(int timeOut)
{
mTimeOut = timeOut;
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
request.Timeout = mTimeOut;
return request;
}
}
}
|
MSDN홈페이지에서 WebClient를 찾아보면 새개발에는 가능하면 사용하지 않는게 좋다고 하며 대신에 HttpClient클래스를 사용하는게 좋다고 하니 참고하시기 바랍니다.
https://learn.microsoft.com/ko-kr/dotnet/api/system.net.webclient?view=net-7.0
