Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

asp.net και multithreading

Îåêßíçóå áðü ôï ìÝëïò tasos. Τελευταία δημοσίευση από το μέλος tasos στις 01-06-2010, 14:38. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-05-2010, 13:44 58822

    asp.net και multithreading

    Σε μία asp.net web application θέλω να τρέξω μία function η οποία θέλει αρκετό χρόνο για να εκτελεστεί. Αποφάσισα λοιπόν να την εκτελέσω σε ένα ξεχωριστό thread. Ο κώδικας είναι ο εξής:

        Private Sub WriteToLog(ByVal SomeString As String)
    Dim myLog As New IO.StreamWriter(LogPath, True)
    myLog.WriteLine(SomeString)
    myLog.Close()
    End Sub

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    WriteToLog("I am not the thread")
    Dim myThread As New Thread(AddressOf DoStuff)
    myThread.Start()
    End Sub

    Private Sub DoStuff()
    WriteToLog("I am the thread")
    End Sub


    Τοπικά όλα τρέχουν όμορφα, αλλά όταν έκανα κάποιες δοκιμές στον production server μας είδα ότι δεν φαίνεται να τρέχει τίποτα. Δοκίμασα να απλοποιήσω την DoStuff() βάζοντας να κάνει κάτι απλό, π.χ. να γράψει σε ένα log file αλλά από ότι φαίνεται δεν τρέχει ούτε αυτό. Ο production server είναι σε medium trust, κ αυτό είναι η μόνη διαφορά που μπορώ να σκεφτώ.

    Καμιά ιδέα για το τι μπορεί να φταίει;

    Τάσος Καραγιάννης

    Baby debugging steps...
    Δημοσίευση στην κατηγορία: ,
  •  26-05-2010, 17:29 58824 σε απάντηση της 58822

    Re: asp.net και multithreading

    Δοκίμασε με την ThreadPool.QueueUserWorkItem Method

    http://msdn.microsoft.com/en-us/library/system.threading.threadpool.queueuserworkitem.aspx

    Αν και νομίζω ότι δεν γίνεται με αυτό τον τρόπο σε μια ASP.NET εφαρμογή... θα σκοτώσει το throughput καθώς οι workers είναι για άλλο πράγμα.


    https://twitter.com/biboudis
  •  26-05-2010, 17:52 58827 σε απάντηση της 58824

    Απ: Re: asp.net και multithreading

    Ναι, δοκίμασα κ αυτή τη προσέγγιση αλλά δεν είδα κάποια αλλαγή στη συμπεριφορά. Έχω την εντύπωση πως είναι θέμα με το medium trust διότι σε άλλον server που έχει full trust έχω εφαρμογές οι οποίες εκτελούν διάφορες εργασίες με νήματα. Δυστυχώς, με αρκετό googling δεν βρίσκω κάτι σχετικό.

    Τάσος Καραγιάννης

    Baby debugging steps...
  •  26-05-2010, 20:00 58828 σε απάντηση της 58822

    Απ: asp.net και multithreading

    Τι ακριβώς κάνει η DoStuff; Μήπως δεν είναι θέμα threading; Αντιγράφω από εδώ:

    Medium Trust Summary

    The main constraints placed on medium trust Web applications are:

    • OleDbPermission is not available. This means you cannot use the ADO.NET managed OLE DB data provider to access databases. However, you can use the managed SQL Server provider to access SQL Server databases.
    • EventLogPermission is not available. This means you cannot access the Windows event log.
    • ReflectionPermission is not available. This means you cannot use reflection.
    • RegistryPermission is not available. This means you cannot access the registry.
    • WebPermission is restricted. This means your application can only communicate with an address or range of addresses that you define in the <trust> element.
    • FileIOPermission is restricted. This means you can only access files in your application's virtual directory hierarchy. Your application is granted Read, Write, Append, and PathDiscovery permissions for your application's virtual directory hierarchy.

    You are also prevented from calling unmanaged code or from using Enterprise Services.

    Στο άρθρο αναφέρει πως να δημιουργήσεις custom policies σε medium trust environments. Ελπίζω να βοηθήσει.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  27-05-2010, 00:32 58833 σε απάντηση της 58828

    Απ: asp.net και multithreading

    Η διαδικασία που θέλω να εκτελέσω είναι η δημιουργία κάποιων xml αρχείων με δεδομένα από τη database και μετά η δημιουργία ενός zip αρχείου με όλα τα files του directory, το website δηλαδή.

    Αλλά έχω πρόβλημα στο να εκτελεστεί ακριβώς αυτό που γράφω. Στο code behind της aspx σελίδας μου, έχω αυτές τις functions που βλέπεις και το txt αρχείο στο οποίο κάνω append. Αν έτρεχε σωστά ο κώδικας τα περιεχόμενα του αρχείου θα ήταν

    I am not the thread.
    I am the thread.

    Αλλά το αρχείο περιέχει την πρώτη γραμμη μόνο, άρα δεν τρέχει καν η μία εντολή της DoStuff. Η αλήθεια είναι ότι αν δεν βάλω σε thread την DoStuff, η διαδικασία εκτελείται κανονικά. Το άρθρο που μου δείχνεις το διάβασα, αλλά ο κώδικας που θέλω να κάνει η DoStuff εκτελείται κανονικά σε medium trust περιβάλλον αν δεν είναι σε thread, δηλαδή δεν με περιορίζουν τα παραπάνω permission. Άρα κάτι αλλάζει όταν ο κώδικας εκτελείται μέσω του thread. Αλλά τι;

    Θα κάνω κ άλλες δοκιμές, π.χ. η DoStuff να μην κάνει I/O, απλά να γράφει σε κάποιες μεταβλητές. Κυρίως για να δώ αν όντως δεν ξεκινάει καν το thread ή απλά κάνει abort. θα δοκιμάσω ξανά την προσέγγιση του Άγγελου, μήπως έτσι δούμε κάποια διαφορά στην συμπεριφορά.



    Τάσος Καραγιάννης

    Baby debugging steps...
  •  27-05-2010, 02:00 58835 σε απάντηση της 58833

    Απ: asp.net και multithreading

    Αντί του StreamWriter που δεν είναι thread safe, δοκίμασε να χρησιμοποιήσεις, όπως άλλωστε συστήνει και το documentation, το TextWriter.Synchronized. Ρίξε μια ματιά κι εδώ. Επίσης, καλό είναι να βάζεις τα streams σε ένα Using - EndUsing statement.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  01-06-2010, 14:38 58904 σε απάντηση της 58835

    Απ: asp.net και multithreading

    Από ότι φαίνεται τελικά το πρόβλημα είναι όταν το thread δημιουργεί το myLog StreamWriter object. Αν αυτό το object δημιουργηθεί π.χ. στην Page_Load τότε η εκτέλεση του προχωράει κανονικά και χωρίς προβλήματα. Δυστυχώς για αυτό που θέλω να τρέξω δεν γίνεται να ανοίξω τα όποια files από πριν.

    Υπάρχει τρόπος να δώσουμε στο thread δικαιώματα read & write για αρχεία;
    Τάσος Καραγιάννης

    Baby debugging steps...
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems