2010-02-15 13 views
8

मैं ऐसी वेबसाइट बना रहा हूं जहां मुझे एक ऐसे पृष्ठ की आवश्यकता है जहां उपयोगकर्ता बड़ी वीडियो फाइलें अपलोड कर सके, मैंने स्ट्रीमिंग के साथ डब्ल्यूसीएफ सेवा बनाई है लेकिन मैं वेब पेज के बटन_Click ईवेंट से डब्ल्यूसीएफ सेवा को कॉल कर रहा हूं।एएसपी से बड़ी फ़ाइलें अपलोड करें। नेट एप्लिकेशन

मैं WCF सेवा निर्माण

WCF Streaming

मैं के रूप में यह कुशल होना चाहिए और सर्वर की स्मृति में बफ़र नहीं किया जाना चाहिए इस्तेमाल किया स्ट्रीमिंग है उल्लेख लेख के नीचे का इस्तेमाल किया है।

अब

1 प्रश्न) मैं शक नहीं है कि पूरी फ़ाइल वेब सर्वर पर अपलोड की गई है हो रहा है और फिर इसे WCF सेवा सर्वर के लिए स्थानांतरित कर रहा है ... अगर यह सच है तो मैं स्ट्रीमिंग का लाभ नहीं मिल रहा है के साथ-साथ आईआईएस और वेब सर्वर नीचे बहुत जल्द ही उपयोगकर्ता बड़ी फाइल या एक से अधिक उपयोगकर्ता अपलोड करता है, तो हो सकता है फ़ाइलों के लिए चुनाव वर्तमान में

2) कुछ अन्य तकनीक

के साथ एक ही आपरेशन करने के लिए किसी अन्य कारगर तरीका कृपया है अपलोड कर रहे हैं मेरी मदद करें ...

संपादित करें:

मैं उस मामले में एएसपी नेट कोड से फोन नहीं कर रहा हूँ तो WCF सेवा विधि को भी यह वेब सर्वर जो मैं HTTPFox के साथ की जाँच की है, बाइट्स स्थानांतरित कर रहा है

मैं अपलोड के साथ बात ऊपर जाँच कर ली है यूआई पर एक बटन को नियंत्रित और डालने का क्लिक करें जिसका क्लिक ईवेंट पीछे कोड में एक विधि से जुड़ा हुआ है। वेब सर्वर (एएसपी नेट आवेदन) - - सेवा सर्वर (WCF सेवा)

  • क्लाइंट मशीन - सेवा सर्वर (

    तो, अभी भी मुझे लगता है कि भ्रम की स्थिति है कि कैसे डेटा स्थानांतरित कर रहा है

    1. क्लाइंट मशीन चल रहा है डब्ल्यूसीएफ सेवा)

    नोट: यदि मैं बटन_क्लिक पर डीबग पॉइंट डाल रहा हूं और 10 केबी फ़ाइल अपलोड कर रहा हूं तो यह कम से कम 1 सेकंड में हिट करता है। लेकिन अगर मैं 50 एमबी फाइल अपलोड कर रहा हूं तो इसमें समय लग रहा है।

    मुझे लगता है कि button_click घटना

  • +0

    मुझे लगता है कि शीर्षक होना चाहिए "अपलोड बड़ी फ़ाइलों * * एएसपी.नेट आवेदन "। – Constantin

    उत्तर

    5

    1) मैं संदेह हो रहा है कि पूरे फ़ाइल वेब सर्वर पर अपलोड की गई है और तो इसे डब्ल्यूसीएफ सेवा सर्वर में स्थानांतरित कर दिया गया है ...अगर यह सच है तो मैं स्ट्रीमिंग के रूप में अच्छी तरह से के रूप में आईआईएस और वेब सर्वर का लाभ नहीं हो रही है बहुत जल्द ही उपयोगकर्ता अपलोड करता है, तो बड़ी फाइल या एक से अधिक उपयोगकर्ता फ़ाइलों चोर अपलोड कर रहे हैं नीचे हो जाएगा वर्तमान में

    नहीं है, आप यहां सामान उलझन में हैं। जब आप एक बड़ी फ़ाइल अपलोड करने के लिए डब्ल्यूसीएफ स्ट्रीमिंग का उपयोग करते हैं, तो फ़ाइल को आकार में कई केबीटी के ब्लॉक में - टुकड़ों में भेजा जा रहा है। डब्ल्यूसीएफ सर्वर - आईआईएस में चल रहा है या एक एनटी सेवा या कंसोल ऐप में स्वयं-होस्ट किया गया है - जबकि उन हिस्सों को प्राप्त करते हैं और उन्हें डिस्क पर लिखते हैं, जैसे वे पहुंचते हैं।

    आप "पूरी फ़ाइल को वेब सर्वर पर अपलोड नहीं करते हैं" और फिर "इसे स्थानांतरित करें" डब्लूसीएफ सेवा में - डब्ल्यूसीएफ सेवा स्वयं फ़ाइल प्राप्त कर रही है और इसे संभालने - और केवल एक बार।

    यदि आप अपने डब्ल्यूसीएफ सेवा को स्वयं होस्ट करते हैं - एक कंसोल ऐप में, एक विनफॉर्म ऐप, या एक विंडोज एनटी सेवा - यहां तक ​​कि कोई भी आईआईएस या वेब सर्वर शामिल नहीं है। डब्ल्यूसीएफ इसे सब कुछ खुद से संभालता है।

    डब्ल्यूसीएफ स्ट्रीमिंग का उपयोग संभवतः सबसे मेमोरी कुशल में से एक है और बड़ी फ़ाइलों को सर्वर पर स्थानांतरित करने के सबसे सरल तरीकों में से एक है।

    बाहर चेक विषय पर कुछ और उदाहरण और ब्लॉग पोस्ट:

    +0

    हैलो मार्क_एस मुझे भी एक ही विचार है, लेकिन क्या आप मुझे उस परिदृश्य की व्याख्या कर सकते हैं जिसे मैंने अपने संपादन में समझाया है, जहां मैं किसी भी डब्ल्यूसीएफ सेवा को नहीं बुला रहा हूं, फिर भी पूरी फाइल स्थानांतरित हो रही है, यही कारण है कि मुझे लगता है कि डेटा पहले स्थानांतरित किया गया है वेब सर्वर (एएसपी .NET ऐप सर्वर) – Radhi

    +0

    @ राधी: मुझे समझ में नहीं आता कि आप वास्तव में क्या करने की कोशिश कर रहे हैं ...... अपने डब्ल्यूसीएफ सेवा कोड को असेंबली में डालने का प्रयास करें, और अपना स्वयं का आत्म- होस्ट - एक सरल कंसोल ऐप करेगा। फिर आप किसी भी वेब सर्वर/आईआईएस या कुछ भी पूरी तरह से स्वतंत्र हैं। क्या वह काम करता है? –

    +0

    दरअसल यह वीडियो अपलोड करने के लिए एक वेबसाइट है और उपयोगकर्ता उन्हें बीच में साझा कर सकते हैं, इसलिए मैं चाहता हूं कि उपयोगकर्ता वीडियो अपलोड पेज पर जा सके और उसे उस पृष्ठ से अपलोड करने में सक्षम हो। तो, क्या कंसोल एप्लिकेशन में डब्ल्यूसीएफ सेवा होस्ट करना और क्लाइंट से कॉल करना संभव है (क्योंकि मेरे पास क्लाइंट मशीन पर कोई नियंत्रण नहीं है) क्या फ़ाइल अपलोड करने के लिए जेसीईआर से डब्ल्यूसीएफ सेवा को कॉल करना संभव है? कृपया मुझे गाइड करें ... – Radhi

    2

    यहाँ अपने सबसे अच्छा समाधान है अंदर WCF सेवा को फोन की कूट डाला, मैं तुम्हें के रूप में ही मार्ग चला गया और यह निष्कर्ष निकाला एफ़टीपी आसान है और दोषरहित काम करता है। यहाँ कुछ उदाहरण कोड है:

    सबसे पहले इस पुस्तकालय मिलता है, दोषरहित काम करता है:

    http://www.freedownloadscenter.com/Programming/Components_and_Libraries/BytesRoad_NetSuit_Library.html

    using System; 
        using System.Collections.Generic; 
        using System.Linq; 
        using System.Text; 
        using System.ServiceModel; 
        using System.IO; 
        using System.Configuration; 
        using System.Collections.Specialized; 
        using System.Drawing; 
        using System.Drawing.Imaging; 
        using System.Net; 
        using BytesRoad.Net.Ftp; 
    
    
    
    
    
        namespace GetMedia 
        { 
         class Program 
         { 
    
          static void Main(string[] args) 
          { 
    
           string strPath; 
           string strThumbPath; 
           string strThumbLocalPath; 
           string strURLRoot; 
           string strVideoFile; 
           string strThumbfile; 
           string strError; 
    
    
           BizetDataDataContext db = new BizetDataDataContext(); 
           VCMediaDataContext db2 = new VCMediaDataContext(); 
           db.Connection.ConnectionString = Settings.Default.ConnectionString; 
           db2.Connection.ConnectionString = Settings.Default.ConnectionString; 
    
           //Temp Folder 
           strPath = Settings.Default.TempFolder; 
           strThumbLocalPath = Settings.Default.ThumbPath; 
    
    download video and thumb 
          //then upload to mediaserver 
    
           IQueryable<BizetInfo> custQuery = 
           from bizet in db.BizetInfos 
           where bizet.Path != null 
           select bizet; 
    
           foreach (BizetInfo objbizet in custQuery) 
           { 
            //Grab filename and path 
    
    
            strVideoFile = Path.GetFileName(objbizet.Path).Replace("%20", "_").Replace("_medium", "").Replace(" ", "_"); 
            strThumbfile = Path.GetFileName(objbizet.Path).Replace("%20", " ").Replace("_medium.wmv", ".mpg.png"); 
            strURLRoot = objbizet.Path.Replace(Path.GetFileName(objbizet.Path), ""); 
            strThumbPath = strURLRoot + strThumbfile; 
    
    
    
            strError = ""; 
    
            try 
            { 
    
    
    
             wsViaCastMedia.MediaTransferSoapClient ws = new wsViaCastMedia.MediaTransferSoapClient(); 
    
             System.Net.WebClient wc = new System.Net.WebClient(); 
             //connect to Bizet 
             Console.WriteLine("Starting spotID: " + objbizet.SPOTID.ToString().Trim()); 
             Console.WriteLine("connected to ws"); 
             Console.WriteLine("Downloading Video File"); 
    
             //Download Video 
             wc.DownloadFile(objbizet.Path, strPath + strVideoFile); 
    
             //Download Thumb 
             Console.WriteLine("Downloading Thumb File"); 
    
             wc.DownloadFile(strThumbPath, strThumbLocalPath + strThumbfile); 
    
             wc.Dispose(); 
    
             //new ftp code 
    
             BytesRoad.Net.Ftp.FtpClient f = new BytesRoad.Net.Ftp.FtpClient(); 
             f.PassiveMode = false; 
    
             f.Connect(999999999, "IPADDRESS OF FTP", 21); 
             f.Login(999999999, "", ""); 
    
             try 
             { 
              f.ChangeDirectory(999999999, objbizet.CLIENTID.ToString().Trim()); 
             } 
             catch (Exception e) 
             { 
              f.CreateDirectory(999999999, objbizet.CLIENTID.ToString().Trim()); 
              f.ChangeDirectory(999999999, objbizet.CLIENTID.ToString().Trim()); 
              Console.WriteLine(e); 
             } 
    
             f.PutFile(999999999, strVideoFile, "E:\\temp\\" + strVideoFile); 
    
    
    
             Console.WriteLine("Transfer of Video File " + objbizet.Path + " Complete"); 
             //response.Close(); 
             f.Disconnect(999999999); 
    
            } 
            catch (Exception e) 
            { 
             Console.WriteLine(e); 
             strError = e.ToString(); 
            } 
            finally //Update Data 
            { 
             //check if spot Exists ///need to fix 
    
             //var myquery = from m in db2.Medias 
             //    where m.SpotID == Convert.ToInt32(objbizet.SPOTID.Trim()) 
             //    select m; 
             //foreach (var mm in myquery) 
             //{ 
             // //db2.DeleteMedia(objbizet.SPOTID.Trim()); 
             //} 
    
             if (strError == "") 
             { 
              db2.AddMedia(Convert.ToInt32(objbizet.SPOTID), objbizet.Title, objbizet.Keywords, objbizet.Path, strVideoFile, objbizet.CLIENTNAME, Convert.ToInt32(objbizet.CLIENTID), objbizet.SUBCATEGORYNAME, Convert.ToInt32(objbizet.SUBCATEGORYID), Convert.ToDecimal(objbizet.PRICE), strThumbfile, objbizet.Description); 
             } 
             else 
             { 
              db2.AddMedia(Convert.ToInt32(objbizet.SPOTID), "Under Maintenance - " + objbizet.Title, objbizet.Keywords, objbizet.Path, strVideoFile, objbizet.CLIENTNAME, Convert.ToInt32(objbizet.CLIENTID), objbizet.SUBCATEGORYNAME, Convert.ToInt32(objbizet.SUBCATEGORYID), Convert.ToDecimal(objbizet.PRICE), strThumbfile, objbizet.Description); 
             } 
            } 
    
    
    
    
           } 
           //dispose 
           db.Dispose(); 
           db2.Dispose(); 
    
          } 
    
        } 
    
    } 
    
    संबंधित मुद्दे