سؤال

أحاول تنزيل مجموعة من البيانات المتسلسلة بشكل تدريجي. الهدف هو إرسال كتلة واحدة كبيرة من الخادم، ومعالجتها جزئيا على العميل أثناء التنزيلات.

أنا أستخدم فئة SYSTEM.NET.WebClient وإعداد خاصية IntainReadreadStreamBuffering إلى False. وفقا لتوثيق MSDN، يجب أن يسمح لي ذلك بالوصول إلى الدفق الوارد من الحدث OpenReadcompleted.

عندما أحاول الوصول إلى الدفق، ومع ذلك، فإنه يلقي عدم استخدام NotsupportedException. هذه ليست مشكلة في سياسة المجال عبر المجال، وإذا قمت بتعيين الخاصية PLAYREADEREADSTREAMBUFE لتحقيق تخصيصها ويقرأ المحتوى تماما. هل فاتني شيء؟ كيف يمكنني إجراء التنزيلات التقدمية من 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 وتنزيل أقل من 4 كيلو بايت من البياناتب أي لن يمنحك البيانات حتى يكون لديك أكثر من 4 كيلو بايت منه. بعد 4 كيلو بايت، لديك كل الحبيبات التي تحتاجها. الحلول الممكنة:

  • إرسال بيانات القمامة للحصول على ما يصل إلى 4 كيلو بايت
  • إذا كنت تعرف أن الطلب سيكون صغيرا، فقم بتعيين allowReadreadStreamBuffering إلى True.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top