Silverlight WebClient Progressive 다운로드
-
13-09-2019 - |
문제
직렬화 된 데이터 배열을 점차적으로 다운로드하려고합니다. 목표는 서버에서 단일 큰 블록을 보내고 다운로드하는 동안 클라이언트에서 부분적으로 처리하는 것입니다.
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로 설정하십시오.
제휴하지 않습니다 StackOverflow