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

 

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

Rapidshare style

Îåêßíçóå áðü ôï ìÝëïò Παπαδημητρίου Γεώργιος. Τελευταία δημοσίευση από το μέλος Παπαδημητρίου Γεώργιος στις 10-10-2008, 10:32. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-10-2008, 12:25 45299

    Rapidshare style

    Γεια χαρά,

    έχω αναπτύξει μια εφαρμογή η οποία ελπίζω να γίνει συνδρομητική, στυλ Rapidshare

    Τι θα ήθελα να κάνω; 
    Ο κωδικός που θα δίνεται για την ανανέωση της συνδρομής θα δίνει πρόσβαση στα δεδομένα του SQL server από διαφορετικούς υπολογιστές.
    ...με μία μικρή λεπτομέρεια
    Μόνο ένας υπολογιστής θα έχει πρόσβαση κάθε φορά

    Με αυτό τον τρόπο (ξέρω ότι ζούμε στην Ελλάδα) ο χρήστης ο οποίος έχει κανονικά τη συνδρομή του,
    θα αποθαρρύνεται να δώσει τους κωδικούς στον "κολλητό" γιατί πολύ απλά δεν θα μπορεί να συνδεθεί εφόσων έχει συνδεθεί ο κολλητός πρωτίστως!

    Ευχαριστώ για τον χρόνο σας

  •  09-10-2008, 13:21 45302 σε απάντηση της 45299

    Απ: Rapidshare style

    Το Rapidshare είναι Internet service και η δημοσίευση είναι στο Winforms forum οπότε .... τί εννοείς? Ή μήπως θέλεις να φτιάξεις κάποιο service το οποίο θα μπορούν να το κτυπάνε και Winforms clients? Μάλλον θα πρέπει να ξανακάνεις την ερώτηση χωρίς παραπομπές στο Rapidshare.

    Υποθέτωντας ότι η ερώτηση σου έχει να κάνει με licensing ουσιαστικά ρωτάς "πως θα περιορίσω τον αριθμό των ταυτόχρονων συνδέσεων ενός συνδρομητή στο service μου"? Η ερώτηση αυτή δεν έχει σχέση με τον SQL server και δεν μπορεί να λυθεί σε αυτό το επίπεδο.

    Ουσιαστικά θα πρέπει να κρατάς ποιοί χρήστες είναι online και να εμποδίζεις τη σύνδεση ενός χρήστη αν ξεπεράσει το μέγιστο επιτρεπόμενο όριο. Επειδή όμως μπορεί να πέσει η σύνδεση ενός χρήστη και να φαίνεται ότι είναι logged-in θα πρέπει η εφαρμογή να κάνει περιοδικά μία keep-alive κλήση στην υπηρεσία. Κάθε χ λεπτά μετά εσύ θα πρέπει να καθαρίζεις από τη λίστα των online χρηστών αυτούς που είναι inactive για πολύ χρόνο.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  09-10-2008, 14:05 45304 σε απάντηση της 45302

    Απ: Rapidshare style

    Παναγιώτης Καναβός:

    Το Rapidshare είναι Internet service και η δημοσίευση είναι στο Winforms forum οπότε .... τί εννοείς?

    Η αναφορά "Rapidshare" έγινε σχετικά με τον τρόπο.
    Πληρώνω και έχω κωδικό για χρήση υπηρεσιών περιορισμένης χρονικής διάρκειας.

    Παναγιώτης Καναβός:

    Υποθέτωντας ότι η ερώτηση σου έχει να κάνει με licensing ουσιαστικά ρωτάς "πως θα περιορίσω τον αριθμό των ταυτόχρονων συνδέσεων ενός συνδρομητή στο service μου"?

    Η ερώτηση πολύ όμορφα γίνεται "πως θα περιορίσω τον αριθμό των ταυτόχρονων συνδέσεων ενός συνδρομητή στα δεδομένα του SQL".

    Παναγιώτης Καναβός:

    Κάθε χ λεπτά μετά εσύ θα πρέπει να καθαρίζεις από τη λίστα των online χρηστών αυτούς που είναι inactive για πολύ χρόνο.

    Αυτό ακριβώς ήθελα να ρωτήσω...
    1) Αντί να κάνει την κλήση keep alive η εφαρμογή, δεν γίνεται να κάνει την κλήση keep alive o SQL?
    2) Σε περίπτωση που δεν γίνεται το 1, μπορεί ο ίδιος ο SQL να κοιτάζει τα δεδομένα του "keep alive πίνακα" κάθε X χρόνο
        και να καθαρίζει από τη λίστα των online χρηστών αυτούς που είναι inactive για πολύ χρόνο?

    Σε καμία περίπτωση δεν θα ήθελα να κάνω επιπλέον εφαρμογή και υπολογιστή όλο το 24ωρο στη πρίζα για να κάνει την ανωτέρω εργασία.

     

     

     

     

  •  09-10-2008, 15:35 45308 σε απάντηση της 45299

    Απ: Schedule στον SQL Server

    "2) Σε περίπτωση που δεν γίνεται το 1, μπορεί ο ίδιος ο SQL να κοιτάζει τα δεδομένα του "keep alive πίνακα" κάθε X χρόνο
        και να καθαρίζει από τη λίστα των online χρηστών αυτούς που είναι inactive για πολύ χρόνο?"

     

    και η λύση ονομάζεται Job Schedule στον SQL Server Agent...

    http://msdn.microsoft.com/en-us/library/cc645912.aspx

    ...εάν καταφέρω φυσικά να πείσω την εταιρεία με τον SQL Server να δημιουργήσει αυτό το job for me! 

    No permissions no honey!

  •  09-10-2008, 20:50 45321 σε απάντηση της 45308

    Απ: Schedule στον SQL Server

    Δεν δίνεις αρκετά στοιχεία για να καταλάβω τί ζητάς. Το keep-alive χρειάζεται όταν έχεις web applications ή dekstop εφαρμογές οι οποίες δεν κρατάνε συνέχεια ανοικτό ένα connection στη βάση. Αν σκεφτείς μάλιστα ότι αυτό είναι απλά σωστή τακτική, θα καταλάβεις ότι κατά κανόνα ο SQL Server δεν ξέρει ποιοί χρησιμοποιούν κάθε στιγμή την υπηρεσία. Στην περίπτωση αυτή ο χρήστης μπορεί να έχει ανοικτή την εφαρμογή ή να έχει κάνει login σε ένα web site κι ας μήν υπάρχει ανοικτή σύνδεση στη βάση. Για το λόγο αυτό πρέπει περιοδικά η εφαρμογή ή κάποιο javascript να λέει στο server "είμαι ακόμα εδώ". Δεν έχει νόημα ούτε να ανανεώνει ούτε να ελέγχει ο ίδιος ο SQL Server τον πίνακα των logged-on users, απλά γιατί δεν ξέρει ποιοί είναι και ποιοί δεν είναι logged on!
    Μάλιστα, δεν υπάρχει καν λόγος να αποθηκεύεις τη λίστα των online χρηστών στη βάση. Μπορείς άνετα να κρατάς ένα shared array στη μνήμη όπου θα καταγράφεις ποιοί είναι online κάθε στιγμή. Σε μία web εφαρμογή μπορείς να αποθηκεύσεις αυτά τα στοιχεία στο Application State.

    Ο SQL Server 2005 και μετά πάντως μπορεί να ελέγξει και να περιορίσει πόσα ταυτόχρονα connections μπορεί να έχει ανοιγμένα ο ίδιος χρήστης, αλλά αυτό είναι χρήσιμο μόνο αν ο κάθε χρήστης κρατάει συνέχεια ανοικτά τα connections του. Ουσιαστικά σε βολεύει μόνο αν η υπηρεσία που παρέχεις είναι η πρόσβαση στη βάση. Αυτό μπορείς να το πετύχεις με ένα logon trigger. Μάλιστα, το παράδειγμα του Books Online περιγράφει ακριβώς πως να περιορίσεις τον αριθμό connection ανά χρήστη. Το trigger έχει τη μορφή:

    USE master;
    GO
    CREATE LOGIN login_test WITH PASSWORD = '3KHJ6dhx(0xVYsdf' MUST_CHANGE, CHECK_EXPIRATION = ON;
    GO
    GRANT VIEW SERVER STATE TO login_test;
    GO
    CREATE TRIGGER connection_limit_trigger
       ON ALL SERVER WITH EXECUTE AS 'login_test'
       FOR LOGON
    AS
       BEGIN
          IF ORIGINAL_LOGIN()= 'login_test' 
      
             AND (SELECT COUNT(*) FROM sys.dm_exec_sessions
                   WHERE is_user_process = 1 AND
                   original_login_name = 'login_test') > 3
          ROLLBACK;
    END;

    Το trigger αυτό ελέγχει τα connections μόνο για το χρήστη login_test αλλά μπορείς να αλλάξεις το Where σε  WHERE is_user_process = 1 AND original_login_name = ORIGINAL_LOGIN() ) > 3

    Σε κάθε περίπτωση όμως θα πρέπει να εξηγήσεις τί θέλεις να κάνεις, και όχι το πως, για να μπορέσεις να βρεις την απάντηση. 


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-10-2008, 10:32 45339 σε απάντηση της 45321

    Απ: logon trigger

    Φυσικά δεν χρειάζεται να επισημάνω ότι η συνδρομή για εσένα θα είναι free liletime!
    Γιατι έτσι όπως πάμε θα σύνδεθείς πριν από εμένα με τη βάση που έχω τα δεδομένα Wink

    Σε ευχαριστώ!

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