Αναγν. άρθρου: 910440 - Τελευταία αναθεώρηση: Παρασκευή, 24 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0

Χρήση στοιχείων ελέγχου σύνδεσης για ένα υπάρχον αρχείο προέλευσης δεδομένων, δημιουργώντας μια υπηρεσία παροχής της προσαρμοσμένης ιδιότητας μέλους στο ASP.NET 2.0

Συμβουλή συστήματοςΑυτό το άρθρο ισχύει για διαφορετικό λειτουργικό σύστημα από αυτό που χρησιμοποιείτε. Το περιεχόμενο του άρθρου που ενδέχεται να μην σας αφορά έχει απενεργοποιηθεί.
Στήλη φωνητική υποστήριξη ASP.NET

Χρήση στοιχείων ελέγχου σύνδεσης για ένα υπάρχον αρχείο προέλευσης δεδομένων, δημιουργώντας μια υπηρεσία παροχής της προσαρμοσμένης ιδιότητας μέλους στο ASP.NET 2.0

Για να προσαρμόσετε αυτήν τη στήλη για τις ανάγκες σας, θέλετε να προσκαλέσετε να υποβάλλετε τις ιδέες σας σχετικά με θέματα που σας ενδιαφέρουν, μπορείτε και θέματα για τα οποία θέλετε να δείτε απευθύνεται σε μελλοντικές άρθρα της Γνωσιακής βάσης και οι στήλες υποστήριξης της φωνής. Μπορείτε να υποβάλετε σας ιδέες και τα σχόλιά σας χρησιμοποιώντας τοΕρώτηση για την (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) MAPI. Υπάρχει επίσης μια σύνδεση για τη φόρμα στο κάτω μέρος αυτής της στήλης.

Σε αυτήν τη σελίδα

Ανάπτυξη όλων | Σύμπτυξη όλων

ΕΙΣΑΓΩΓΗ

Γεια και Καλώς ορίσατε πάλι! Το όνομά μου είναι Parag Agarwal και είμαι ένας μηχανικός υποστήριξης εδώ στη Microsoft. Αυτό το μήνα μας πρόκειται να συζητήσετε κάποια άλλη εντυπωσιακή δυνατότητα στο Microsoft ASP.NET 2.0, τη Διαχείριση υπηρεσιών παροχής για στοιχεία ελέγχου σύνδεσης.

ΕΠΙΣΚΟΠΗΣΗ

Στη στήλη αυτού του μήνα, μου θα αφορούν τα ακόλουθα θέματα:
  • Σύντομη επισκόπηση των στοιχείων ελέγχου σύνδεσης
  • Σύντομη επισκόπηση του μοντέλου παροχής στο ASP.NET 2.0
  • Walkthrough σχετικά με τη δημιουργία μιας προσαρμοσμένης υπηρεσίας παροχής που μπορούν να χρησιμοποιηθούν από τα στοιχεία ελέγχου σύνδεσης με μια υπάρχουσα προέλευση δεδομένων

Σύνδεση στοιχείων ελέγχου

Πρόκειται για μια πολύ συνηθισμένη απαίτηση ώστε η λειτουργικότητα της σύνδεσης σε σχεδόν κάθε εφαρμογή Web. Πριν από το ASP.NET 2.0 κυκλοφόρησε, εμείς χρησιμοποιείται για τη σχεδίαση περιβάλλοντα εργασίας χρήστη (UI) για τον έλεγχο ταυτότητας του χρήστη. Αυτό σχετίζεται η εγγραφή πολλά περιττά κώδικα. Για να αποφύγετε κάτι τέτοιο, ASP.NET 2.0 παρέχει μια λύση πλήρη σύνδεση με τη μορφή ένα σωρό από στοιχεία ελέγχου διακομιστή για εφαρμογές Web που απαιτούν χωρίς προγραμματισμό. Εσωτερικά, αυτά τα στοιχεία ελέγχου είναι υπεύθυνοι για την απόδοση του κατάλληλου περιβάλλοντος εργασίας Χρήστη όπου ένας χρήστης μπορεί να εισαγάγετε πιστοποιήσεις δικό του και επικυρώνουν τους. Τώρα, εμείς δεν χρειάζεται να σχεδιάσετε το περιβάλλον εργασίας Χρήστη ως προγραμματιστής σελίδας και δεν πρέπει να εκτελέσει τον έλεγχο ταυτότητας του χρήστη κατά τη σύνταξη κώδικα δικό μας. Το υποκείμενο μοντέλο υπηρεσίας παροχής που χρησιμοποιείται από τοΣύνδεσηαναλαμβάνει τον έλεγχο της. Εμείς θα δείτε πώς τοΣύνδεσηστοιχείο ελέγχου χρησιμοποιεί τις υπηρεσίες παροχής ελέγχου ταυτότητας του χρήστη στην επόμενη ενότητα. Μπορείτε να βρείτε περισσότερες πληροφορίες σχετικά με τα στοιχεία ελέγχου σύνδεσης και πώς να χρησιμοποιήσουμε τους στην ακόλουθη τοποθεσία Web:
http://msdn2.Microsoft.com/en-us/library/ms178329.aspx (http://msdn2.microsoft.com/en-us/library/ms178329.aspx)

Μοντέλο υπηρεσίας παροχής

Το μοντέλο παροχής επιτρέπει στους προγραμματιστές να δημιουργήσουν πρόσθετα λογισμικού. Βασικά έχει ως στόχο να decouple μια αφαίρεση από την υλοποίηση, ώστε να μπορεί να διαφέρει ανεξάρτητα και τα δύο τμήματα. Για να το κάνετε αυτό, το ASP.NET παρέχει ορισμένες αφηρημένη βασικές κλάσεις που έχουν όλες τις συνοπτικές μεθόδους και ιδιότητες που απαιτούνται για να υλοποιηθεί από την κλάση deriving που παρέχει η υλοποίηση για αυτές τις μεθόδους και τις ιδιότητες.

Για περισσότερες πληροφορίες σχετικά με βασικές κλάσεις abstract, επισκεφθείτε την ακόλουθη τοποθεσία Web:
.aspx http://msdn2.Microsoft.com/en-us/library/k535acbf (vs.71) (http://msdn2.microsoft.com/en-us/library/k535acbf(vs.71).aspx)
Έτσι, για να συνοψίσετε, υπηρεσίες παροχής χρησιμοποιούνται ως μεσάζοντες από τα στοιχεία ελέγχου να αλληλεπιδρούν με ένα χώρο αποθήκευσης δεδομένων. Παρέχουν αφαίρεσης μεταξύ της εφαρμογής και του αρχείου προέλευσης δεδομένων με τον ίδιο τρόπο που παρέχουν προγράμματα οδήγησης συσκευών, αφαίρεσης από μια συσκευή υλικού.

Επειδή αυτό το άρθρο talks σχετικά με τις υπηρεσίες παροχής ιδιότητας μέλους, εμείς θα περιγράφουν τι κλάσεων ASP.NET 2.0 παρέχει τη δυνατότητα συμμετοχής. Η δυνατότητα συμμετοχής του ASP.NET 2.0 ορίζει μια αφηρημένη κλάση βάσης που ονομάζεται τοMembershipProviderCLASS. Επιπλέον,MembershipProviderπροέρχεται από μια διαφορετική βασική κλάση που ονομάζεται τοProviderBaseκλάση, η οποία είναι μια κλάση κοινά σε όλες τις υπηρεσίες παροχής. Επομένως, οι προγραμματιστές μπορούν να δημιουργήσετε τις δικές τους κλάσεις υπηρεσιών παροχής από που προέρχονται τα υπάρχονταMembershipProviderCLASS.

Για περισσότερες πληροφορίες σχετικά με τοMembershipProviderANDProviderBaseκλάσεις, επισκεφθείτε τις ακόλουθες τοποθεσίες Web:
http://msdn2.Microsoft.com/en-us/library/System.Web.Security.membershipprovider.aspx (http://msdn2.microsoft.com/en-us/library/system.web.security.membershipprovider.aspx)

http://msdn2.Microsoft.com/en-us/library/System.Configuration.Provider.providerbase.aspx (http://msdn2.microsoft.com/en-us/library/system.configuration.provider.providerbase.aspx)
Αφού μας έχουν καθοριστεί η υπηρεσία παροχής ιδιότητας μέλους, πρέπει να περιγράφεται σε ένα αρχείο ρύθμισης παραμέτρων, είτε στο Machine.config (για όλες τις εφαρμογές Web) ή στο Web.config (για μια συγκεκριμένη εφαρμογή Web). Είναι η κατάλληλη υπηρεσία παροχής παρουσίες κατά το χρόνο εκτέλεσης από τις πληροφορίες που παρείχε το αρχείο ρύθμισης παραμέτρων ASP.NET. Ωστόσο, είναι δυνατή η αλλαγή της υπηρεσίας παροχής δυναμικά κατά το χρόνο εκτέλεσης καθώς και.

Για περισσότερες πληροφορίες σχετικά με τον καθορισμό ρυθμίσεων παραμέτρων για μια υπηρεσία παροχής ιδιότητας μέλους, επισκεφθείτε την ακόλουθη τοποθεσία Web:
http://msdn2.Microsoft.com/en-us/library/ms178329.aspx (http://msdn2.microsoft.com/en-us/library/ms178329.aspx)
Τώρα, τοΣύνδεσηcontrol is shipped with two built-in membership providers that use a specific data scheme/data structure:However, if we want to work with an existing database structure, we can easily code a custom membership provider to get login controls to talk to the old database structure.

Creating a custom membership provider

Now that we have enough information on login controls and the underlying provider model that they use, let's create a custom membership provider to get existing login controls to work against a custom data store.

ΣΗΜΕΙΩΣΗThe custom provider will use a SQL Server database calledTestDB.TestDBwill have a table namedΧρήστες (Permissions for Users)with the fields UserID, UserName, and Password and other information, such as e-mail ID and address.
  1. Start Microsoft Visual Studio 2005.
  2. Create a class library project, and give it a name, for example, CustomMembershipProviderLib.
  3. Add a source file to the project, for example, CustomMembershipProvider.cs.
  4. ΣυμπερίληψηSystem.WebANDSystem.Configurationin the references section.
  5. Verify that the following namespaces are included in the CustomMembershipProvider.cs file.
    using System;
    using System.Web;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web.Security;
    using System.Collections.Specialized;
    using System.Data.SqlClient;
  6. Inherit theCustomMembershipProviderclass with theMembershipProviderCLASS.
    class CustomMembershipProvider : 
    MembershipProvider
  7. As we already know,MembershipProvideris an abstract class, so we need to override all the abstract methods in theCustomMembershipProviderCLASS. There is a very cool feature in Visual Studio 2005 that does this automatically. As soon as you extend any abstract class, just right-clickAbstract class, και στη συνέχεια κάντε κλικ στο κουμπίImplement Abstract Class. This automatically places declarations for all the abstract methods. You will notice that the body for each method contains a common line of code.
    throw new Exception("The method or operation is not implemented.");
    This indicates what features are supported by the custom provider.

    ΣΗΜΕΙΩΣΗImplementation for theΠροετοιμασίαmethod is mandatory.
  8. In the custom provider, we will concentrate on providing a few features such as the following:
    • Creating a new user by using theCreateUserWizardControl
    • Validating the user credentials by using theLoginControl
    We will implement these features one by one. First, implement theΠροετοιμασίαΗ μέθοδος. This method is called by ASP.NET when the provider is loaded. Also, providers are loaded when the application uses them for the first time, and they are created once per application domain.
    public override void Initialize(string name,NameValueCollection config)
    {
        // Verify that config isn't null
        if (config == null)
            throw new ArgumentNullException("config");
    
        // Assign the provider a default name if it doesn't have one
        if (String.IsNullOrEmpty(name))
            name = "AspNetCustomMembershipProvider";
    
        // Add a default "description" attribute to config if the
        // attribute doesn't exist or is empty
        if (string.IsNullOrEmpty(config["description"]))
        {
            config.Remove("description");
            config.Add("description", "Custom SQL Provider");
        }
    
        // Call the base class's Initialize method
        base.Initialize(name, config);
    }
  9. Next, implement theValidateUserΗ μέθοδος. It takes the input user name and password and verifies that the membership data source contains a matching user name and password. If the method returns true, theLogincontrol allows the user to pass through the verification. Otherwise, it asks for the credentials again.
    public override bool ValidateUser(string username, string password)
    {
        SqlConnection cnn = null;
        SqlCommand cmd = null;
        bool userExists = true;
        try
        {
            cnn = new SqlConnection();
            cnn.ConnectionString = "connection string for the existing data source";
            cnn.Open();
            string selectQry = "Select query for username and password";
            cmd = new SqlCommand(selectQry, cnn);
            SqlDataReader rdr = cmd.ExecuteReader();
            if (!rdr.Read())
                userExists = false;
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            cmd.Dispose();
            cnn.Close();
        }
        return userExists;
    }
  10. Implement one more method calledCreateUserthat is called by theCreateUserWizardControl. It takes input, such as user name, password, e-mail address, and other information, and adds a new user to the existing membership data source. It returns theMembershipUserobject, which represents a newly created user. It also setsMembershipCreateStatus, which tells whether the user was successfully created. If the user was not successfully created, we can specify the reason.
    public override MembershipUser CreateUser(string username, string
              password, string email, string passwordQuestion, string
              passwordAnswer, bool isApproved, object providerUserKey,
              out MembershipCreateStatus status)
    {
        SqlConnection cnn = null;
        SqlCommand cmd = null;
        MembershipUser newUser = null;
        try
        {
            cnn = new SqlConnection();
            cnn.ConnectionString = "connection string for the existing data source";
            cnn.Open();
            string insertQry = "Prepare the Insert query...";
            cmd = new SqlCommand(insertQry, cnn);
            cmd.ExecuteNonQuery();
    
            // Right now I am giving default values for DateTime
            // in Membership constructor.
            newUser = new MembershipUser(
            "AspNetCustomMembershipProvider",
            username, null, String.Empty, String.Empty,
             String.Empty, true, false, DateTime.Now,
             DateTime.Now, DateTime.Now, DateTime.Now,
             DateTime.Now
            );
            status = MembershipCreateStatus.Success;
        }
        catch (Exception ex)
        {
            status = MembershipCreateStatus.ProviderError;
            newUser = null;
            throw ex;
        }
        finally
        {
            cmd.Dispose();
            cnn.Close();
        }
        return newUser;
    }
  11. Το υπόλοιπο της μεθόδους να μοιάζει με τα παρακάτω. Εάν θέλετε, μπορείτε να υλοποιήσετε οποιαδήποτε από αυτές.
    // MembershipProvider Properties
    public override string ApplicationName
    {
        get { throw new NotSupportedException(); }
        set { throw new NotSupportedException(); }
    }
    
    public override bool EnablePasswordRetrieval
    {
        get { return false; }
    }
    
    public override bool EnablePasswordReset
    {
        get { return false; }
    }
    
    public override int MaxInvalidPasswordAttempts
    {
        get { throw new NotSupportedException(); }
    }
    
    public override int MinRequiredNonAlphanumericCharacters
    {
        get { throw new NotSupportedException(); }
    }
    
    public override int MinRequiredPasswordLength
    {
        get { throw new NotSupportedException(); }
    }
    
    public override int PasswordAttemptWindow
    {
        get { throw new NotSupportedException(); }
    }
    
    public override MembershipPasswordFormat PasswordFormat
    {
        get { throw new NotSupportedException(); }
    }
    
    public override string PasswordStrengthRegularExpression
    {
        get { throw new NotSupportedException(); }
    }
    
    public override bool RequiresQuestionAndAnswer
    {
        get { return false; }
    }
    
    public override bool RequiresUniqueEmail
    {
        get { return false; }
    }
    
    public override MembershipUser GetUser(string username,
        bool userIsOnline)
    {
        throw new NotSupportedException();
    }
    
    public override MembershipUserCollection GetAllUsers(int pageIndex,
        int pageSize, out int totalRecords)
    {
        throw new NotSupportedException();
    }
    
    public override int GetNumberOfUsersOnline()
    {
        throw new NotSupportedException();
    }
    
    public override bool ChangePassword(string username,
        string oldPassword, string newPassword)
    {
        throw new NotSupportedException();
    }
    
    public override bool
        ChangePasswordQuestionAndAnswer(string username,
        string password, string newPasswordQuestion,
        string newPasswordAnswer)
    {
        throw new NotSupportedException();
    }
    
    public override bool DeleteUser(string username,
        bool deleteAllRelatedData)
    {
        throw new NotSupportedException();
    }
    
    public override MembershipUserCollection
        FindUsersByEmail(string emailToMatch, int pageIndex,
        int pageSize, out int totalRecords)
    {
        throw new NotSupportedException();
    }
    
    public override MembershipUserCollection
        FindUsersByName(string usernameToMatch, int pageIndex,
        int pageSize, out int totalRecords)
    {
        throw new NotSupportedException();
    }
    
    public override string GetPassword(string username, string answer)
    {
        throw new NotSupportedException();
    }
    
    public override MembershipUser GetUser(object providerUserKey,
        bool userIsOnline)
    {
        throw new NotSupportedException();
    }
    
    public override string GetUserNameByEmail(string email)
    {
        throw new NotSupportedException();
    }
    
    public override string ResetPassword(string username,
        string answer)
    {
        throw new NotSupportedException();
    }
    
    public override bool UnlockUser(string userName)
    {
        throw new NotSupportedException();
    }
    
    public override void UpdateUser(MembershipUser user)
    {
        throw new NotSupportedException();
    }
  12. Μεταγλωττίστε το έργο βιβλιοθήκη κλάσης. Θα δημιουργήσει το αρχείο DLL του αποτελέσματος.
  13. Ανοίξτε μια υπάρχουσα τοποθεσία Web ή να δημιουργήσετε μια νέα τοποθεσία Web.
  14. Προσθέστε το αρχείο DLL αναφορά στην τοποθεσία Web.
  15. Η καταχώρηση της υπηρεσίας παροχής στο αρχείο Web.config ως εξής.
    <membership defaultProvider="AspNetCustomMembershipProvider">
      <providers>
        <clear />
        <add  name="AspNetCustomMembershipProvider"	type="CustomMembershipProvider"/>
      </providers>
    </membership>
  16. Προσθήκη σελίδας φορμών Web που ονομάζεται Login.aspx όπου τοΣύνδεσημπορεί να χρησιμοποιηθεί το στοιχείο ελέγχου.
    <form id="Form1" runat="server">
      <div>
        <asp:Login ID="Login1" runat="server"></asp:Login>
      </div>
    </form>
  17. Προσθέστε μια άλλη φόρμες Web σελίδα με όνομα CreateUser.aspx όπου τοCreateUserWizardμπορεί να χρησιμοποιηθεί το στοιχείο ελέγχου.
    <form id="Form1" runat="server">
      <div>
        <asp:CreateUserWizard ID="CreateUserWizard1" runat="server"></asp:CreateUserWizard>
      </div>
    </form>
  18. Εκτέλεση και τις δύο σελίδες φόρμες Web και θα εμφανιστεί η έξοδος.
Εάν δεν χρησιμοποιείτε το Visual Studio, μπορείτε να εκτελέσετε τα παρακάτω βήματα:
  1. Ανοίξτε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου.
  2. Δημιουργήστε ένα αρχείο με όνομα CustomMembershipProvider.cs και ακολουθήστε τις οδηγίες που δίνονται στα βήματα 5 έως 17.
  3. Δημιουργήστε έναν κατάλογο στο φάκελο wwwroot.
  4. Έναρξη Microsoft Internet Information Services (IIS) Manager και σημάδι του νέου καταλόγου ως ριζικό εικονικό κατάλογο. Επίσης, βεβαιωθείτε ότι έχει ρυθμιστεί ώστε να εκτελείται το Microsoft .NET Framework 2.0, σε περίπτωση που μια άλλη έκδοση του .NET Framework που είναι εγκατεστημένη στον υπολογιστή.
  5. Αντιγράψτε τις σελίδες φόρμες Web και Web.config σε αυτόν τον κατάλογο.
  6. Δημιουργήστε ένα φάκελο App_Code κάτω από τον νέο κατάλογο.
  7. Αντιγράψτε το αρχείο CustomMembershipProvider.cs στο App_Code το φάκελο.
  8. Εκτέλεση της σελίδας CreateUser.aspx φόρμες Web από τη διαχείριση των υπηρεσιών IIS.

Ολοκλήρωση

Που είναι προς το παρόν σε υπηρεσίες παροχής της προσαρμοσμένης ιδιότητας μέλους. Ελπίζω ότι αυτή η στήλη θα σας βοηθήσει να κατανοήσετε τις βασικές πληροφορίες για τη δημιουργία υπηρεσιών παροχής της προσαρμοσμένης ιδιότητας μέλους και πώς μπορούν να παρέχουν αφαίρεσης στον τελικό χρήστη.

Ευχαριστούμε για την ώρα. Εμείς πρόκειται να γράψει περισσότερα σχετικά με τις υπηρεσίες που παρέχονται από το ASP.NET 2.0 και πώς μας να επεκτείνετε τους για να προσαρμόσετε τη συμπεριφορά τους σύμφωνα με τις ανάγκες μας.

Για περισσότερες πληροφορίες σχετικά με τις υπηρεσίες παροχής, επισκεφθείτε τις ακόλουθες τοποθεσίες Web:
Κιτ εργαλείων παροχής
http://msdn2.Microsoft.com/en-us/ASP.NET/aa336558.aspx (http://msdn2.microsoft.com/en-us/asp.net/aa336558.aspx)

Υπηρεσία παροχής Μοντέλο σχεδίασης μοτίβο και προδιαγραφές, μέρος 1
http://msdn2.Microsoft.com/en-us/library/ms972319.aspx (http://msdn2.microsoft.com/en-us/library/ms972319.aspx)

Η υπηρεσία παροχής Για Σχεδίαση μοτίβο, μέρος 2
http://msdn2.Microsoft.com/en-us/library/ms972370.aspx (http://msdn2.microsoft.com/en-us/library/ms972370.aspx)
Πάντα, αίσθηση ελεύθερο να υποβάλλουν ιδέες σχετικά με θέματα που θέλετε στο μέλλον απευθύνεται στήλες ή με τη χρήση της Γνωσιακής Βάσης τηςΕρώτηση για την (http://support.microsoft.com/common/survey.aspx?scid=sw;en;1176&p0=&p1=&p2=&p3=&p4=) MAPI.

Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft ASP.NET 2.0
Λέξεις-κλειδιά: 
kbprogramming kbsecurity kbcode kbhowto kbmt KB910440 KbMtel
Μηχανικά μεταφρασμένοΜηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:910440  (http://support.microsoft.com/kb/910440/en-us/ )
Retired KB ArticleΑποποίηση ευθυνών για περιεχόμενο της Γνωσιακής Βάσης (KB) που έχει αποσυρθεί
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.