2011-10-20 2 views
2

Silverlight 응용 프로그램에서 WebClient를 사용하여 REST 서비스에 액세스합니다. 알 수없는 양의 비동기 호출입니다. 멋진 점은 요청 및 응답을 주문할 수 있다는 것입니다. 응답은 요청에 일치합니다. 응답이 어떤 순서로 되돌아 올지 모르기 때문에 이것은 필요합니다.Silverlight WebClient 시간 초과를 설정하는 방법은 무엇입니까?

그러나 WebClient를 사용하여 전화를 걸려면 어떻게 "타임 아웃"을해야합니까? 수 15 초 말해 나는 WebClient/this 코드를 대리인/lambda와 함께 사용하고 싶습니다. WebRequest 클래스가있는 시간 제한 속성이 있지만 WebRequest로 WebClient를 바꿀 수 있지만 기능을 유지할 수 있는지 확실하지 않습니다.

int maxRequests = list_S.Count; 
// amount of URI 
     foreach (string item in list_S) 
     { 
      bool isValid = Uri.IsWellFormedUriString(item, UriKind.Absolute); 
      Uri uriTest; 
      if(isValid) //if it is valid Uri, send request 
      { 
       WebClient wc = new WebClient(); 
       wc.DownloadStringCompleted += (s, args) => 
       { 
        if (args.Error == null) 
        { 
         dict.Add((int)args.UserState, args.Result); 

        } 
        //here you test if it is the last request... if it is, you can 
        //order the list and use it as you want 
        if (dict.Count == maxRequests) 
        { 
         var orderedResults = dict.OrderBy(a => a.Key); 
        } 
        closeTabitem_SensorSource(); 
       }; 
       wc.DownloadStringAsync(new Uri(item), i++); 
      } 
      else 
      { 
       MessageBox.Show("Uri FAIL!: " + item); 
      } 
     } 

답변

3

WebRequest은 요청 시간 초과를 관리하는 수단도 제공하지 않습니다.

취해야하는 접근 방식은 WebClientCancelAsync 메서드를 호출 할 DispatcherTimer을 기반으로 자신의 코드와 함께 WebClient을 사용하는 것입니다.

+0

DispatcherTimer가 나에게 잘 어울립니다. – Gero

+0

내가 잘못 본 것이 아니라면 시간 초과가 내장되어 있습니다 (메모리에서 약 30 초 정도의 시간이 걸립니다).이 방법은 더 짧은 시간 제한을 원할 경우 작동하지만 더 긴 시간 제한을 원할 경우 작동하지 않습니다. –

+0

@Drew : 나는 당신이 잘못 생각한 것 같습니다. 서버에서 5 분 지연 테스트 BrowserHttp 또는 ClientHttp 스택 중 하나를 타임 아웃 할 수 없습니다. 물론 클라이언트와 서버상의 코드 사이에 모든 방식의 다른 장치가있을 수 있습니다.이 장치는 지연을 초래하여 개입하여 시간 초과를 초래할 수 있습니다. 그러나 Silverlight에는 기본 제공 시간 제한이 있거나 너무 크게 설정되어있는 것으로 나타나지 않습니다. 30 초는 약간 인색합니다. – AnthonyWJones

관련 문제