ওয়েবক্লিয়েন্টের জন্য সময়সীমা নির্ধারণ করুন .ডাউনলোডফাই ()


92

আমি webClient.DownloadFile()একটি ফাইল ডাউনলোড করতে ব্যবহার করছি আমি কি এর জন্য একটি টাইমআউট সেট করতে পারি যাতে এটি ফাইলটি অ্যাক্সেস করতে না পারলে এত বেশি সময় লাগবে না?

উত্তর:


42

ব্যবহার করে দেখুন WebClient.DownloadFileAsync()। আপনি CancelAsync()নিজের টাইমআউট দিয়ে টাইমার দ্বারা কল করতে পারেন ।


4
আমি টাইমার বা স্টপওয়াচ ব্যবহার করতে চাই না। আমি কিছু অন্তর্নির্মিত হ্যাক বা এপিআই পদ্ধতির চাই। টাইমার / স্টপওয়াচ ব্যবহারে দেখার জন্য আমার অতিরিক্ত থ্রেডের জন্য ব্যয় করতে হবে, যদিও এই বৈশিষ্ট্যটি ইতিমধ্যে বাস্তবায়িত হয়েছে, তাই চাকাটি কেন পুনরায় উদ্ভাবন করা হয়েছে

@ কিলান্নি: তারপরে অন্য উত্তর থেকে সমাধানটি নিয়ে যান। অথবা এইচটিপিপিলেট ব্যবহার করুন এবং সময়সীমা সম্পত্তি সেট করুন। এছাড়াও দয়া করে নোট করুন এই উত্তরটি ২০০৯ সালের।
abatishchev

8
নেট .৪.৫+ আপনি এছাড়াও ব্যবহার করতে পারেন var taskDownload = client.DownloadFileTaskAsync(new Uri("http://localhost/folder"),"filename")এবং তারপরেtaskDownload.Wait(TimeSpan.FromSeconds(5));
3:38

258

আমার উত্তর থেকে আসে এখানে

আপনি একটি উদ্ভূত শ্রেণি তৈরি করতে পারেন, যা বেস WebRequestশ্রেণীর সময়সীমা নির্ধারণ করবে :

using System;
using System.Net;

public class WebDownload : WebClient
{
    /// <summary>
    /// Time in milliseconds
    /// </summary>
    public int Timeout { get; set; }

    public WebDownload() : this(60000) { }

    public WebDownload(int timeout)
    {
        this.Timeout = timeout;
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request != null)
        {
            request.Timeout = this.Timeout;
        }
        return request;
    }
}

এবং আপনি এটি বেস ওয়েবক্লিয়েন্ট শ্রেণীর মতোই ব্যবহার করতে পারেন।


4
কেবল অন্য কাউকে এই সহায়ক কোডটি জুড়ে আসার জন্যই বেসটি কল করার আগে আমাকে সময়সীমা নির্ধারণ করতে হয়েছিল et গেটওয়েব্রেইকস্ট (ঠিকানা)
ডারথটং

পুনরায় ভাগ করা "ফলাফল" এর জন্য একটি সম্ভাব্য নাল মান সম্পর্কে অভিযোগ করে এবং ওয়েবরয়েস্টে টাইমআউট মান সেট করার আগে নাল চেকের পরামর্শ দেয়। দ্রবীভূত কোডটির দিকে তাকানো, আপনি যদি আপনার ওয়েবকনফাইগে একটি কাস্টম ওয়েবরকোয়েস্টমোডিয়াল সরবরাহ না করেন তবে এটি অসম্ভব বলে মনে হচ্ছে, তবে এই জাতীয় উত্তরের জন্য, আমি কেবল এটি যুক্ত করব।
কেভিন কলম্বে

আমি এই লাইনে ত্রুটি পাচ্ছি request.Timeout। ত্রুটি _ 'System.Net.WebRequest' does not contain a definition for 'Timeout' and no extension method 'Timeout' accepting a first argument of type 'System.Net.WebRequest' could be found (are you missing a using directive or an assembly reference?) , আমি কী মিস করছি?
এরিক

4
@ এরিক: আমি usingএই কোড স্নিপেট ব্যবহার করে এমন নির্দেশিকা যুক্ত করেছি ।
বেনিয়ামিন

4
@ টিটল: ওয়েবক্লিয়েন্টের চেয়ে এইচটিপিপিলেট ব্যবহার করুন।
abatishchev

3

ধরে নিই যে আপনি ওয়েবক্লিনেন্ট.অপেনআরিড (...) পদ্ধতিটি ব্যবহার করে এবং স্ট্রিমের সময়সীমা নির্ধারণ করে যা এটি প্রত্যাবর্তন করে তা আপনাকে কাঙ্ক্ষিত ফলাফল দেবে:

using (var webClient = new WebClient())
using (var stream = webClient.OpenRead(streamingUri))
{
     if (stream != null)
     {
          stream.ReadTimeout = Timeout.Infinite;
          using (var reader = new StreamReader(stream, Encoding.UTF8, false))
          {
               string line;
               while ((line = reader.ReadLine()) != null)
               {
                    if (line != String.Empty)
                    {
                        Console.WriteLine("Count {0}", count++);
                    }
                    Console.WriteLine(line);
               }
          }
     }
}

ওয়েবক্লিয়েন্ট থেকে প্রাপ্ত এবং সময়সীমা নির্ধারণের জন্য getWebRequest (...) ওভাররাইড করা @ বেনিয়ামিন পরামর্শ দিয়েছেন, আমার পক্ষে সেভাবে কাজ করেনি, তবে এটি হয়েছে।


@ জেফিমোরিস আমার পক্ষে কাজ করেনি। "অনুরোধটি বাতিল হয়ে গিয়েছিল - অপারেশনটির সময়সীমা শেষ হয়ে গেছে" বলে আমি এখনও ওয়েবএক্সেপশন পেয়েছি, যদিও আমি stream.ReadTimeoutঅনুরোধটি বাস্তবায়নের জন্য বাস্তবে গ্রহণের চেয়ে বড় উল্লেখ করেছি
চেস্টার 89

অন্যদিকে @ জেফিমোরিস, ওয়েবক্লিয়েন্ট সাবক্লাসের সাথে সমাধানটিও কার্যকর হয়নি, সুতরাং এটি সম্ভবত সার্ভারের পক্ষে একটি সমস্যা
চেস্টার 89
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.