반응형
웹서비스사용시 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
'프로그래밍 > C#' 카테고리의 다른 글
[C#] MSSQL 저장프로시저 사용하기 (0) | 2022.12.26 |
---|---|
[C#] MSSQL 연동방법 (0) | 2022.12.16 |
[C#] 다국어 처리 방법(MultiLanguage) (0) | 2022.10.28 |
[C#] 서비스프로그램 만들기 (0) | 2022.10.22 |
[C#] Base64인코딩/디코딩 , Http Basic Auth (0) | 2022.10.07 |