2013-10-02 6 views
2

현재 WebView를 사용하여 DPP를 사용하여 암호화 된 데이터를 표시하려고합니다. 문제는 StorageFile을 IRandomAccessStream으로 읽은 후 (즉, 데이터의 암호화를 해제 한 후) 스트림이 어떤 방식 으로든 조작 된 경우 WebView에서 아무것도 표시하지 못한다는 것입니다. 다시 다음 http://code.msdn.microsoft.com/windowsapps/XAML-WebView-control-sample-58ad63f7Windows Store 8.1 : 스트림을 변경할 때 WebView.NavigateToStream이 작동하지 않습니다.

와 메모리 스트림에 IRandomAccessStream을 변환 할 수있는 "StreamUriWinRTResolver"클래스를 변경하고 :

이 문제

쉽게 Microsoft에서 제공하는 소스를 사용하여 재현 할 수 있습니다. 기본적으로, 라인 (128)에 S4_NavToStream.xaml.cs,이 변경이와

StorageFile f = item as StorageFile; 
IRandomAccessStream stream = await f.OpenAsync(FileAccessMode.Read); 
return stream.GetInputStreamAt(0); 

을 : 실행시

StorageFile f = item as StorageFile; 
IRandomAccessStream randStream = await f.OpenAsync(FileAccessMode.Read); 
var stream = randStream.AsStream(); 
MemoryStream ms = new MemoryStream(); 
stream.CopyTo(ms); 
return ms.AsInputStream(); 

이 빈 페이지가 표시됩니다. 물론 스트림 변환을 잘못 사용하지 않는 한 이것이 버그라고 생각하기 시작했습니다. 아무도 비슷한 걸 시도하지 않았 니?

+0

코드 디버깅을 시도 했습니까? 'MemoryStream'에 텍스트가 올바르게 복사 되었습니까? – svick

+0

예. 바이트를 바이트로 비교하지는 않았지만 메모리 스트림의 크기는 정확합니다. 실제 응용 프로그램에서는 스트림을 webview로 전달하기 전에 암호화되지 않은 스트림을 디스크에 복사했으며 디스크에 올바른 html 파일이 생성되었지만 아직 웹 페이지에 빈 페이지가 표시되었습니다. – letstango

답변

0

토마스 후버 (Thomas Huber)는 social.msdn.microsoft.com에 대한 질문에 매우 정중하게 대답했습니다. 여기에 전체 답 : 요약

http://social.msdn.microsoft.com/Forums/en-US/f51ab699-66c3-4961-8952-fbe341bf3e23/windows-81-webviewnavigatetostream-does-not-work-when-altering-the-stream

이 문제는 입력 스트림에 메모리 스트림의 변환 주위입니다. 올바른 작업 코드 :

StorageFile f = item as StorageFile; 
IRandomAccessStream randStream = await f.OpenAsync(FileAccessMode.Read); 
var stream = randStream.AsStream(); 
var ms = new MemoryStream(); 
stream.CopyTo(ms); 

InMemoryRandomAccessStream msras = new InMemoryRandomAccessStream(); 
DataWriter dw = new DataWriter(msras); 
dw.WriteBytes(ms.ToArray()); 
await dw.StoreAsync(); 
var inputStream= msras.GetInputStreamAt(0); 
return inputStream; 
관련 문제