문제

직렬화 된 데이터 배열을 점차적으로 다운로드하려고합니다. 목표는 서버에서 단일 큰 블록을 보내고 다운로드하는 동안 클라이언트에서 부분적으로 처리하는 것입니다.

System.net.webclient 클래스를 사용하고 있으며 allowreadStreamBuffering 속성을 False로 설정하고 있습니다. MSDN 문서에 따르면 OpenReadCompleted 이벤트에서 들어오는 스트림에 액세스 할 수 있습니다.

그러나 스트림에 액세스하려고하면 지원되지 않은 예고가 발생합니다. 이것은 크로스 도메인 정책 문제가 아니며, allowreadstreambuffering 속성을 TRUE로 설정하면 컨텐츠를 완벽하게로드하고 읽습니다. 내가 뭔가를 놓치고 있습니까? Silverlight에서 어떻게 진보적 인 다운로드를 수행해야합니까?

이 문제를 복제하는 최소 코드는 다음과 같습니다.

    private void BeginProgressiveDownload()
    {
        WebClient client = new WebClient();
        client.AllowReadStreamBuffering = false;
        client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
        client.OpenReadAsync(new Uri("http://STREAMABLE RESOURCE HERE"));
    }

    void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {
        e.Result.ReadByte();
    }
도움이 되었습니까?

해결책

이를 위해 WebClient를 사용하지 말고 소켓을 사용하지 마십시오 (가능하면).

Mike Schwarz에는 사용할 수있는 우수한 소켓 클라이언트가 있습니다.

http://weblogs.asp.net/mschwarz/archive/2008/03/07/silverlight-2-and-sockets.aspx

다른 팁

당신은 IE에 있고 다운로드하고 있습니까? 4KB 미만의 데이터? 즉, 4KB 이상을 가질 때까지 데이터를 제공하지 않습니다. 4KB 후에는 필요한 모든 세분성이 있습니다. 가능한 해결책:

  • 쓰레기 데이터를 보내 최대 4KB를 얻으십시오
  • 요청이 작다는 것을 알고 있으면 allowreadstreambuffering을 true로 설정하십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top