質問

シリアル化されたデータの配列を段階的にダウンロードしようとしています。目標は、単一の大きなブロックをサーバーから送信し、ダウンロード中にクライアント上で部分的に処理することです。

System.Net.WebClient クラスを使用し、AllowReadStreamBuffering プロパティを false に設定しています。MSDN ドキュメントによると、これにより、OpenReadCompleted イベントからの受信ストリームにアクセスできるようになるはずです。

ただし、ストリームにアクセスしようとすると、NotSupportedException がスローされます。これはクロスドメイン ポリシーの問題ではなく、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();
    }
役に立ちましたか?

解決

(可能な場合)。このためにWebクライアントを使用するのではなく、ソケットしないでください。

マイク・シュワルツは、あなたが使用できる優れたソケットクライアントを持っている。

ます。http://ブログ.asp.net / mschwarz /アーカイブ/ 2008/03/07 / Silverlightの-2-と-sockets.aspx

他のヒント

IE を使用していてダウンロードしていますか 4kb未満のデータ?IE は 4kb 以上のデータを取得するまでデータを提供しません。4kb を超えると、必要な粒度がすべて揃います。可能な解決策:

  • 最大4kbまでのガベージデータを送信
  • リクエストが小さくなることがわかっている場合は、AllowReadStreamBuffering を true に設定します。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top