2017-10-05 13 views
0

가 나는 restsharp 클라이언트가이 같은 설정 요청할 작동하지 :RestSharp 시간 초과

var request = new RestRequest(); 
request.Method = Method.POST; 
request.AddParameter("application/json", jsonBody, ParameterType.RequestBody); 
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; }; 
request.Timeout = -1; 
request.ReadWriteTimeout = -1; 
var url = $"http://{ipAddress}/api/calculate"; 
var client = new RestClient(); 
client.BaseUrl = new Uri(url); 
client.Timeout = -1; 
client.ReadWriteTimeout = -1; 
var response = client.Execute(request); 

이 요청 30 분 주위 완료하는 데 시간이 걸릴 것입니다. 이제는이 일을 더 우아하게하는 방법이 있다는 것을 알고 있습니다. 그러나이 요청에 대해 저는 이것을 이렇게해야합니다.

이 RestSharp 클라이언트 및 요청은 Windows 서비스 내에서 실행됩니다. 서비스가 요청을 실행하면 TimoutException이 발생하고 최대 요청 시간은 약 40 초입니다.

내가 설정 한 시간 초과가이 경우에는 작동하지 않습니다.

아무도 해결책이 있습니까?

답변

1

ReadWriteTimeout 값을 설정하여 생각한 것을 수행하지 않았을 수 있습니다. 값은 무시되므로 기본값을 얻습니다.

이 답변에 따르면 What is default timeout value of RestSharp RestClient? RestSharp는 구현시 HttpWebRequest을 사용합니다.

HttpWebRequest의 timeout 속성은 음수가 아니어야합니다. HttpWebRequest.Timeout Property. 당신이 RestSharp 클라이언트 코드를 보면

이 참조 : https://github.com/restsharp/RestSharp/blob/70de357b0b9dfc3926c95d1e69967c7a7cbe874c/RestSharp/RestClient.cs#L452

 int readWriteTimeout = request.ReadWriteTimeout > 0 
      ? request.ReadWriteTimeout 
      : this.ReadWriteTimeout; 

     if (readWriteTimeout > 0) 
     { 
      http.ReadWriteTimeout = readWriteTimeout; 
     } 
+0

대답 주셔서 감사합니다. 그래서 타임 아웃을 무제한으로 처리하도록 제안하겠습니까? –

+1

먼저 작업을 시작, 상태 및 결과 작업으로 분리합니다. 전화를 걸고 토큰을 반환 한 다음 상태를 확인합니다. 마지막으로, 저장된 결과를 얻으십시오. 그게 가능하지 않다면 시간 제한을 할 수있는 한 최선을 다할 것을 희망하면서 최선을 다할 것을 제안합니다. API를 제어하는 ​​경우 문 # 1 뒤에있는 항목으로 이동하십시오. –

+0

당신이 옳았습니다. 공식 문서에는 무제한 시간 제한을 위해 -1이 있습니다. 나는 Int32.MaxValue처럼 그것을 넣었다. 고마워 친구! –