مشاركة عبر


الإرشادات التفصيلية: استخدام الخدمات تطبيق العميل

يصف هذا الموضوع كيفية إنشاء تطبيقات Windows التي تستخدم الخدمات تطبيق العميل لمصادقة المستخدمين واسترداد أدوار المستخدمين والإعدادات.

في هذه الإرشادات التفصيلية, تؤدى المهام التالية:

  • إنشاء تطبيق Windows Forms واستخدام Visual Studioمصمم مشروع لتمكين وتكوين الخدمات التطبيق العميل.

  • إنشاء بسيط الخدمة ويب ل ASP.NET التطبيق باستضافة الخدمات التطبيقات اختبار تكوين العميل.

  • إضافة مصادقة النماذج للتطبيق الخاص بك. لن يبدأ باستخدام ترميز القرص الثابت مستخدم وكلمة مرور لإجراء اختبار الخدمة. لن ثم إضافة نموذج تسجيل دخول بواسطة تحديد كأحد موفري بيانات اعتماد في تكوين تطبيق الخاص بك.

  • إضافة تستند إلى الأدوار الوظيفية، تمكين وعرض زر فقط للمستخدمين في دور "مدير".

  • الوصول إلى إعدادات ويب. سوف تبدأ بتحميل إعدادات ويب لمستخدم مصادق عليه (اختبار) في الصفحة إعدادات من مصمم مشروع. لن ثم استخدم "مصمم Windows Forms" يربط صندوق نص إلى إعدادات ويب. وأخيراً، سوف تحفظ القيمة المعدلة مرة أخرى إلى الخادم.

  • تطبيق تسجيل الخروج. تتم إضافة خيار تسجيل الخروج إلى النموذج و استدعاء أسلوب تسجيل الخروج.

  • قم بتمكين الوضع غير متصل. سيتم توفير خانة اختيار حيث يمكن للمستخدمين تعيين حالة الاتصال الخاصة بهم. لن ثم استخدم هذه القيمة لتحديد ما إذا كان سيتم موفرو الخدمات تطبيق العميل استخدم محلياً التخزين المؤقت بيانات بدلاً من الوصول إلى الخدمات ويب الخاصة بهم. إعادة المصادقة على وأخيراً، سوف نحو مستخدم الحالي عند إرجاع تطبيق إلى الوضع الاتصال.

المتطلبات الأساسية

تحتاج إلى المكونات التالية لإكمال هذه معاينة:

  • Visual Studio 2008.

إنشاء تطبيق العميل

أولاً عليك التي سوف تقوم هو إنشاء مشروع Windows Forms. Th هو معاينة تستخدم Windows Forms نظراً لمزيد من الأشخاص معتاد، لكن العملية هو مماثلة لمشاريع "البنية الأساسية لبرامج" العروض التقديمية Windows (WPF).

إلى إنشاء عميل التطبيق وتمكين عميل الخدمات تطبيق

  1. في Visual Studio، تحديد الملف | جديد | مشروع خيار قائمة.

  2. في مشروع جديد صندوق حوار في الجزء أنواع Project ، توسيع Visual أساسى أو Visual C#‎ عقدة وحدد نوع المشروع Windows.

  3. تأكد من متحديد ذلك من .NET Framework 3.5 ، وتحديد تطبيق Windows Forms قالب.

  4. قم بتغيير مشروع الاسم إلى ClientAppServicesDemo، و ثم انقر فوق ‏‏موافق .

    مشروع جديد Windows Forms هو المفتوحة في Visual Studio.

  5. تشغيل قائمة مشروع ، تحديد خصائص ClientAppServicesDemo .

    يظهر مصمم مشروع.

  6. في الخدمات علامة تبويب، تحديد تمكين خدمات تطبيق العميل.

  7. تأكد من أن مصادقة "النماذج باستخدام" هو محددة، ثم قم بتعيين موقع خدمة مصادقة و أدوار الخدمة الموقع خدمة ويب إعدادات الموقع إلى https://localhost:55555/AppServices .

  8. ل Visual Basic، التبويب تطبيق ، التعيين الوضع مصادقة إلى تطبيق-معرف .

المصمم بتخزين الإعدادات المحددة في ملف app.config للتطبيق.

في ترتيب هو أشر تطبيق هو المكونة للوصول إلى الجميع الخدمات ثلاثة من نفس مضيف. في مقطع التالي، يتم إنشاء مضيف كتطبيق الخدمة ويب بسيطة، مما يتيح لك إلى اختبار تكوين العميل.

إنشاء مضيف الخدمات تطبيق

في هذا القسم، سوف إنشاء تطبيق الخدمة ويب بسيط يقوم بالوصول إلى بيانات مستخدم من محلي SQL Server Compact 3.5ملف قاعدة بيانات. وبعد ذلك، سيتم نشر قاعدة بيانات باستخدام أداة إدارة مواقع ويب ASP.NET. يمكنك هذا تكوين البسيطة إلى اختبار تطبيق العميل الخاص بك بسرعة. كبديل، يمكنك تكوين مضيف الخدمة ويب إلى الوصول إلى بيانات مستخدم من قاعدة بيانات SQL كاملة أو من خلال cusإلىm MembershipProviderو RoleProviderفئات. لمزيد من المعلومات، راجع إنشاء ثم تكوين قاعدة بيانات خدمات التطبيق لـ SQL Server.

في إجراء التالي، الذي إنشاء وتكوين الخدمة ويب AppServices.

لإنشاء و تكوين مضيف الخدمات تطبيق

  1. في من مستكشف الحل، تحديد الحل ClientAppServicesDemo، و ثم في قائمة ملف ، تحديد إضافة | "مشروع جديد" .

  2. في مشروع جديد لإضافة صندوق الحوار، في جزء أنواع المشاريع المتوقعة و Visual أساسى أو Visual C#‎ عقدة و حدد نوع المشروع ويب.

  3. تأكد من محدد ذلك .NET Framework 3.5 ، ومن ثم تحديد القالب تطبيق الخدمة ويب ASP.NET.

  4. قم بتغيير مشروع الاسم إلى من AppServices و ثم انقر فوق ‏‏موافق .

    تتم تمت الإضافة مشروع جديد لتطبيق الخدمة ويب ASP.NET إلى الحل، و Service1.asmx.vb أو Service1.asmx.cs ملف يظهر في المحرر.

    ملاحظة

    الملف Service1.asmx.vb أو Service1.asmx.cs هو غير مستخدمة في ترتيب هو المثال. إذا كنت تريد إلى احتفظ بيئة العمل لديك غير مزدحمة، يمكنك إغلاقه وحذفها من من مستكشف الحلول.

  5. في من مستكشف الحلول، تحديد مشروع AppServices، و ثم في قائمة مشروع ، تحديد خصائص AppServices .

    يظهر مصمم مشروع.

  6. في التبويب ويب ، تأكد من أن خادم تطوير Studio Vهوual استخدام هو المحدد.

  7. منفذ معينحدد تحديد القيمة 55555 وقم بتعيين مسار الظاهري إلى /AppServices .

  8. حفظ كافة الملفات.

  9. في من مستكشف الحلول، قم بفتح ويب.config و العثور على <system.web>فتح علامة.

  10. إضافة علامة التالية قبل <system.web>علامة.

    authenticationService، profileService، و roleServiceتمكين العناصر في هذه ترميز و تكوين الخدمات تطبيق. لأغراض، الاختبار requireSSLالسمة الخاصة authenticationServiceعنصر هو معينة إلى "خطأ". readAccessPropertiesو writeAccessPropertiesالسمات profileServiceالإشارة إلى العنصر الذي WebSettingsTestTextخاصية هو القراءة/الكتابة.

    ملاحظة

    في تعليمات برمجية الخاصة بالإنتاج، يجب الوصول دوماً إلى الخدمة مصادقة عبر طبقة مآخذ توصيل آمنة (SSL، بواسطة استخدام بروتوكول HTTPS). لمعلومات حول كيفية إلى إعداد SSL، انظر تكوين تأمين طبقة مأخذ التوصيل (دليل العمليات IIS 6.0).

    <system.web.extensions>
      <scripting>
        <webServices>
          <authenticationService enabled="true" requireSSL = "false"/>
          <profileService enabled="true"
            readAccessProperties="WebSettingsTestText"
            writeAccessProperties="WebSettingsTestText" />
          <roleService enabled="true"/>
        </webServices>
      </scripting>
    </system.web.extensions>
    
  11. إضافة العلامة التالية بعد <system.web>فتح علامة بحيث يكون داخل <system.web>العنصر.

    profileعنصر تكوين إعداد ويب مفرد يسمى WebSettingsTestText.

    <profile enabled="true" >
      <properties>
        <add name="WebSettingsTestText" type="string" 
          readOnly="false" defaultValue="DefaultText" 
          serializeAs="String" allowAnonymous="false" />
      </properties>
    </profile>
    

في إجراء التالي، يمكنك استخدام إدارة موقع ويب ASP.NET إلى ol إلى إكمال تكوين الخدمة وتعبئة ملف قاعدة بيانات المحلية. تقوم بإضافة مستخدمين باسم الموظفين و المدير التي تنتمي إلى دورين مع نفس الأسماء. تكون كلمات المرور مستخدم الموظف! and المدير! على التوالي.

إلى تكوين عضوية والأدوار

  1. في من مستكشف الحلول، تحديد مشروع AppServices، و ثم في قائمة مشروع ، تحديد تكوين ASP.NET .

    يظهر أداة إدارة مواقع ويب ASP.NET .

  2. في التبويب الأمان ، انقر فوق استخدام الأمان معالج الإعداد لتكوين الأمان خطوة بخطوة .

    معالج إعداد الأمان يظهر و تعرض الخطوة "الترحيب".

  3. انقر فوق Next.

    يظهر الخطوة تحديد أسلوب الوصول.

  4. تحديد من الإنترنت . هذا إلى تكوين الخدمة لاستخدام مصادقة النماذج بدلاً من مصادقة Windows.

  5. انقر نقراً مزدوجاً فوق التالي.

    يظهر الخطوة تعريف الأدوار.

  6. تحديد تمكين الأدوار لهذا موقع ويب .

  7. انقر فوق Next. نموذج إنشاء دور جديد يظهر.

  8. في صندوق نص اسم دور جديد ، اكتب المدير وثم انقر فوق إضافة دور.

    يظهر هذا الجدول الأدوار موجود مع القيمة المحددة.

  9. في صندوق نص اسم دور جديد ، استبدله المدير الموظف وثم انقر فوق إضافة دور.

    جديد تظهر القيمة في الجدول الأدوار موجود.

  10. انقر فوق Next.

    يظهر الخطوة إضافة المستخدمين.

  11. في مستخدم بإنشاء نموذج ، قم بتحديد قيم التالية.

    اسم المستخدم

    manager

    كلمة المرور

    المدير!

    تأكيد كلمة المرور

    المدير!

    بريد إلكتروني

    المدير@contoso.com

    سؤال الأمان

    manager

    إجابة الأمان

    manager

  12. انقر فوق إنشاء مستخدم.

    تظهر رسالة نجاح.

    ملاحظة

    بريد إلكتروني، سؤال الأمان ، و قيم إجابة الأمان مطلوبة من قبل النموذج، ولكن غير مستخدمة في هذا المثال.

  13. انقر فوق متابعة.

    مستخدم إنشاء النموذج مرة أخرى.

  14. في مستخدم بإنشاء نموذج ، قم بتحديد قيم التالية.

    اسم المستخدم

    موظف

    كلمة المرور

    موظف!

    تأكيد كلمة المرور

    موظف!

    بريد إلكتروني

    employee@contoso.com

    سؤال الأمان

    موظف

    إجابة الأمان

    موظف

  15. انقر فوق إنشاء مستخدم.

    تظهر رسالة نجاح.

  16. انقر فوق Finish.

    من أداة إدارة مواقع الويب مرة أخرى.

  17. انقر فوق إدارة المستخدمين.

    تظهر قائمة المستخدمين.

  18. انقر فوق تحرير الأدوار للمستخدم الموظف ، وقم بتحديد الدور الموظف.

  19. تحرير الأدوار للمستخدم المدير ، انقر و قم بتحديد الدور المدير.

  20. يغلق نافذة مستعرض الذي يستضيف من أداة إدارة مواقع الويب.

  21. إذا ظهر صندوق رسالة يسألك عما إذا كنت تريد إلى إعادة تحميل ملف ويب.config تم تعديلها، انقر فوق نعم.

ويكمل إعداد الخدمة ويب. عند هذه النقطة، يمكنك الضغط على F5 لتشغيل العميل التطبيق و Development Server ASP.NET يبدأ تلقائياً بالإضافة إلى تطبيق العميل. سيستمر الملقم إلى تشغيل بعد إنهاء تطبيق، ولكن سيقوم ببدء التشغيل عند إعادة تشغيل تطبيق. يسمح هذا إلى الكشف عن أية تغييرات قمت بإجرائها إلى ويب.config.

لإيقاف تشغيل الملقم يدوياً، ينقر على اليمين في ASP.NET Development Server رمز في ناحية إعلام من شريط المهام ثم انقر فوق إيقاف. Th هو هو مفيدة بين الحين والآخر للتأكد من حدوث إعادة تشغيل البرامج الأساسية فقط.

إضافة مصادقة النماذج

في إجراء التالي، يمكنك إضافة تعليمات برمجية إلى النموذج الرئيسي إلى التحقق من صحة مستخدم، ورفض الوصول عند مستخدم بتوفير بيانات اعتماد غير صالحة. استخدام القرص الثابت ترميز مستخدم وكلمة مرور إلى اختبار الخدمة.

إلى التحقق من صحة مستخدم في تعليمات برمجية للتطبيق الخاص بك

  1. في مستكشف الحلول ، في مشروع ClientAppServicesDemo، إضافة مرجع تجميع النظام.ويب.

  2. تحديد ملف Form1 و ثم تحديد عرض | تعليمات برمجية من Visual Studioقائمة الرئيسية.

  3. في محرر تعليمات برمجية، قم بإضافة العبارات التالية إلى أعلى Form1 ملف.

    Imports System.Net
    Imports System.Threading
    Imports System.Web.ClientServices
    Imports System.Web.ClientServices.Providers
    Imports System.Web.Security
    
    using System.Net;
    using System.Threading;
    using System.Web.ClientServices;
    using System.Web.ClientServices.Providers;
    using System.Web.Security;
    
  4. في من مستكشف الحل، انقر نقراً مزدوجاً فوق Form1 إلى عرض المصمم.

  5. في المصمم، انقر نقراً مزدوجاً فوق سطح النموذج إلى إنشاء على Form.Loadمعالج الأحداث المسمى Form1_Load.

    يظهر محرر تعليمات برمجية باستخدام رأس المؤشر في Form1_Loadأسلوب.

  6. قم بإضافة التعليمات البرمجية التالية للأسلوب Form1_Load .

    وهذا تعليمات برمجية يرفض الوصول للمستخدمين غير المصادقين بإنهاء تطبيق. بدلاً من ذلك، قد سمحت المستخدمون غير المصادقين الوصول إلى نموذج، ولكن رفض الوصول إلى وظائف معينة. عادة، لن بترميزها ترميزًا اسم مستخدم وكلمة المرور مثل th هو، ولكنه هو مفيدة لأغراض الاختبار. في مقطع التالي، سيتم استبدال هذه التعليمة البرمجية باستخدام تعليمات برمجية أكثر قوة مع عرض صندوق حوار تسجيل دخول و يتضمن ‏‏ استثناء hوling.

    Note that the static Membership.ValidateUser method is in the NET Framework. الإصدار 2.0. Th هو أسلوب المفوضون العمل الخاصة به إلى موفر مصادقة المكون، وتقوم بإرجاع trueإذا مصادقة هو الناجحة. لا يتطلب تطبيق الخاص بك مرجع مباشر إلى موفر مصادقة العميل.

    If Not Membership.ValidateUser("manager", "manager!") Then
    
        MessageBox.Show("Unable to authenticate.", "Not logged in", _
            MessageBoxButtons.OK, MessageBoxIcon.Error)
        Application.Exit()
    
    End If
    
    if (!Membership.ValidateUser("manager", "manager!"))
    {
        MessageBox.Show("Unable to authenticate.", "Not logged in",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
        Application.Exit();
    }
    

يمكنك الآن الضغط على F5 إلى تشغيل تطبيق، ولأنك قمت بتوفير اسم المستخدم الصحيح وكلمة المرور، فستشاهد النموذج.

ملاحظة

في حالة تعذر إلى تشغيل تطبيق، حاول sإلىpping Server تطوير ASP.NET. عند إعادة تشغيل الملقم، تحقق من أن منفذ هو معينة إلى 55555.

إلى ترى خطأ رسالة بدلاً من ذلك، قم بتغيير في ValidateUserمعلمات. على سبيل المثال، استبدال "manager!"معلمة باستخدام كلمة مرور غير صحيحة مثل الثاني "MANAGER".

إضافة نموذج تسجيل دخول كموفر بيانات اعتماد

يمكنك اكتساب بيانات اعتماد مستخدم في جهاز تطبيق تعليمات برمجية وتمريرها إلى ValidateUserالأسلوب. ومع ذلك، فإنه هو غالباً مفيدة للاحتفاظ بتعليمات برمجية الحصول على بيانات اعتماد منفصلة من تعليمات برمجية للتطبيق الخاص بك، في حالة الذي تريد تغييره فيما بعد.

في إجراء التالي، تقوم بتكوين تطبيق الخاص بك إلى استخدام موفر بيانات اعتماد، ثم قم بتغيير جهاز ValidateUserاستدعاء الأسلوب إلى تمرير Emptyلكل من المعلمات. الإشارة السلاسل الفارغة ValidateUserأسلوب إلى الاتصال GetCredentialsأسلوب موفر بيانات اعتماد مكونة.

إلى تكوين تطبيق الخاص بك إلى استخدام موفر بيانات اعتماد

  1. في من مستكشف الحلول، تحديد مشروع ClientAppServicesDemo، و ثم في قائمة مشروع ، تحديد خصائص ClientAppServicesDemo .

    يظهر مصمم مشروع.

  2. في التبويب الخدمات ، قم بتعيين اختياري: بيانات الاعتماد موفر إلى القيمة التالية. تشير هذه القيمة إلى اسم مؤهل بتجميع النوع.

    ClientAppServicesDemo.Login, ClientAppServicesDemo
    
  3. في ‏‏رمز الملف Form1، استبدل التعليمة البرمجية في Form1_Loadأسلوب مع تعليمات برمجية التالية.

    عرض رسالة ترحيب هذه التعليمة البرمجية ومن ثم استدعاء ValidateUsingCredentialsProviderالأسلوب الذي سوف إضافة في الخطوة التالية. إذا كان مستخدم هو غير مصادقة، ValidateUsingCredentialsProviderالأسلوب بإرجاع falseو Form1_Loadإرجاع الأسلوب. يؤدي ذلك إلى منع أية تعليمات برمجية إضافى تشغيل قبل تم إنهاء تطبيق. رسالة ترحيب مفيد إلى إجراء المسح عند إعادة تشغيل تطبيق. لن إضافة التعليمة البرمجية لإعادة تشغيل تطبيق عند تنفيذ تسجيل الخروج لاحقاً في هذه معاينة.

    MessageBox.Show("Welcome to the Client Application Services Demo.", _
        "Welcome!")
    
    If Not ValidateUsingCredentialsProvider() Then Return
    
    MessageBox.Show("Welcome to the Client Application Services Demo.",
        "Welcome!");
    
    if (!ValidateUsingCredentialsProvider()) return;
    
  4. قم بإضافة الأسلوب التالي بعد Form1_Loadالأسلوب.

    This method passes empty strings to the static Membership.ValidateUser method, which causes the Login dialog box to appear. إذا كانت خدمة مصادقة التي هو غير متوفرة، ValidateUserسيتم طرح أسلوب WebException. في هذه الحالة، ValidateUsingCredentialsProviderأسلوب عرض رسالة تحذير ويسألك عما إذا كان مستخدم يريد إلى المحاولة مرة أخرى في الوضع غير متصل. تتطلب هذه الوظيفة حفظ تجزئة كلمة المرور محلياً إلى قم بتمكين تسجيل الدخول دون اتصال الميزة الموصوفة في كيفية القيام بما يلي: تكوين عميل الخدمات تطبيق. Th هو ميزة هو ممكّنه بشكل افتراضي للمشاريع الجديدة.

    إذا كان مستخدم هو التأكد من عدم صحة، ValidateUsingCredentialsProviderdهوplays الأسلوب رسالة إعلام بالخطأ وإنهاء تطبيق. وأخيراً، هذا أسلوب إرجاع نتيجة محاولة مصادقة.

    Private Function ValidateUsingCredentialsProvider() As Boolean
    
        Dim isAuthorized As Boolean = False
    
        Try
    
            ' Call ValidateUser with empty strings in order to display the 
            ' login dialog box configured as a credentials provider.
            isAuthorized = Membership.ValidateUser( _
                String.Empty, String.Empty)
    
        Catch ex As System.Net.WebException
    
            If DialogResult.OK = MessageBox.Show( _
                "Unable to access the authentication service." & _
                Environment.NewLine & "Attempt login in offline mode?", _
                "Warning", MessageBoxButtons.OKCancel, _
                MessageBoxIcon.Warning) Then
    
                ConnectivityStatus.IsOffline = True
                isAuthorized = Membership.ValidateUser( _
                    String.Empty, String.Empty)
    
            End If
    
        End Try
    
        If Not isAuthorized Then
    
            MessageBox.Show("Unable to authenticate.", "Not logged in", _
                MessageBoxButtons.OK, MessageBoxIcon.Error)
            Application.Exit()
    
        End If
    
        Return isAuthorized
    
    End Function
    
    private bool ValidateUsingCredentialsProvider()
    {
        bool isAuthorized = false;
        try
        {
            // Call ValidateUser with empty strings in order to display the 
            // login dialog box configured as a credentials provider.
            isAuthorized = Membership.ValidateUser(
                String.Empty, String.Empty);
        }
        catch (System.Net.WebException)
        {
            if (DialogResult.OK == MessageBox.Show(
                "Unable to access the authentication service." +
                Environment.NewLine + "Attempt login in offline mode?",
                "Warning", MessageBoxButtons.OKCancel, 
                MessageBoxIcon.Warning))
            {
                ConnectivityStatus.IsOffline = true;
                isAuthorized = Membership.ValidateUser(
                    String.Empty, String.Empty);
            }
        }
    
        if (!isAuthorized)
        {
            MessageBox.Show("Unable to authenticate.", "Not logged in",
                MessageBoxButtons.OK, MessageBoxIcon.Error);
            Application.Exit();
        }
        return isAuthorized;
    }
    

إنشاء نموذج تسجيل الدخول إلى

موفر بيانات اعتماد هو فئة تطبيق IClientFormsAuthenticationCredentialsProviderالواجهة. هذا واجهة على أسلوب مفرد يسمى GetCredentialsالذي يرجع ClientFormsAuthenticationCredentialsالكائن. تصف الإجراءات التالية كيفية إنشاء تسجيل دخول صندوق حوار الذي يطبق GetCredentialsعرض نفسه وإرجاع بيانات اعتماد المحددة من قبل مستخدم.

يتم توفير إجراءات منفصلة ل Visual Basicو C# لأن Visual Basicيوفر قالب نموذج تسجيل الدخول على . وهذا يوفر بعض الوقت و ترميز الجهد.

لإنشاء تسجيل دخول صندوق حوار كأحد موفري بيانات اعتماد في Visual أساسى

  1. في من مستكشف الحلول، تحديد مشروع ClientAppServicesDemo، ومن ثم في قائمة مشروع ، تحديد العنصر إضافة جديد .

  2. في إضافة عنصر جديد? صندوق حوار تحديد القالب نموذج تسجيل الدخول ، قم بتغيير العنصر الاسم إلى من Login.vbوثم انقر فوق إضافة.

    تسجيل الدخول صندوق حوار يظهر في "مصمم Windows Forms".

  3. في المصمم، تحديد ‏‏موافق زر وبعد ذلك في الإطار خصائص ، عين DialogResultإلى OK.

  4. في المصمم، إضافة CheckBoxعنصر تحكم إلى النموذج ضمن صندوق نص كلمة المرور .

  5. في خصائص نافذة، عين (اسم) القيمة rememberMeCheckBoxو نص القيمة &Remember me.

  6. تحديد عرض | تعليمات برمجية من Visual Studioقائمة الرئيسية.

  7. في محرر تعليمات برمجية، قم بإضافة التعليمة البرمجية التالية إلى الأعلى ملف.

    Imports System.Web.ClientServices.Providers
    
  8. قم بتعديل توقيع الفئة حيث يطبق الفئة IClientFormsAuthenticationCredentialsProviderالواجهة.

    Public Class Login
        Implements IClientFormsAuthenticationCredentialsProvider
    
  9. تأكد من أن المؤشر بعد IClientformsAuthenticationCredentialsProvider، ثم اضغط مفتاح الإدخال إلى إنشاء GetCredentialsالأسلوب.

  10. حدد موقع GetCredentialsتطبيق و ثم استبداله باستخدام تعليمات برمجية التالية.

    Public Function GetCredentials() As  _
        ClientFormsAuthenticationCredentials Implements _
        IClientFormsAuthenticationCredentialsProvider.GetCredentials
    
        If Me.ShowDialog() = DialogResult.OK Then
            Return New ClientFormsAuthenticationCredentials( _
                UsernameTextBox.Text, PasswordTextBox.Text, _
                rememberMeCheckBox.Checked)
        Else
            Return Nothing
        End If
    
    End Function
    

C# يوفر إجراء التالي الكامل تعليمات برمجية سرد لصندوق حوار تسجيل دخول بسيطة. التخطيط لهذا صندوق حوار قليل نابية، ولكن هو جزء هام GetCredentialsالتنفيذ.

لإنشاء تسجيل دخول صندوق حوار كأحد موفري بيانات اعتماد في C#‎

  1. في من مستكشف الحلول، تحديد مشروع ClientAppServicesDemo، و ثم في قائمة مشروع ، تحديد إضافة فئة .

  2. في إضافة عنصر جديد? صندوق حوار تغيير تسجيل الدخول.cs الاسموثم انقر فوق إضافة.

    فتح الملف تسجيل الدخول.cs في تعليمات برمجية المحرر.

  3. قم باستبدال الرمز الافتراضي مع تعليمات برمجية التالية.

    using System.Windows.Forms;
    using System.Web.ClientServices.Providers;
    
    namespace ClientAppServicesDemo
    {
        class Login : Form,
            IClientFormsAuthenticationCredentialsProvider
        {
            private TextBox usernameTextBox;
            private TextBox passwordTextBox;
            private CheckBox rememberMeCheckBox;
            private Button OK;
            private Button cancel;
            private Label label1;
            private Label label2;
    
            public ClientFormsAuthenticationCredentials GetCredentials()
            {
                if (this.ShowDialog() == DialogResult.OK)
                {
                    return new ClientFormsAuthenticationCredentials(
                        usernameTextBox.Text, passwordTextBox.Text,
                        rememberMeCheckBox.Checked);
                }
                else
                {
                    return null;
                }
            }
    
            public Login()
            {
                InitializeComponent();
            }
    
            private void CloseForm(object sender, System.EventArgs e)
            {
                this.Close();
            }
    
            private void InitializeComponent()
            {
                this.label1 = new System.Windows.Forms.Label();
                this.usernameTextBox = new System.Windows.Forms.TextBox();
                this.label2 = new System.Windows.Forms.Label();
                this.passwordTextBox = new System.Windows.Forms.TextBox();
                this.rememberMeCheckBox = new System.Windows.Forms.CheckBox();
                this.OK = new System.Windows.Forms.Button();
                this.cancel = new System.Windows.Forms.Button();
                this.SuspendLayout();
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(13, 13);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(58, 13);
                this.label1.TabIndex = 0;
                this.label1.Text = "&User name";
                // 
                // usernameTextBox
                // 
                this.usernameTextBox.Location = new System.Drawing.Point(13, 30);
                this.usernameTextBox.Name = "usernameTextBox";
                this.usernameTextBox.Size = new System.Drawing.Size(157, 20);
                this.usernameTextBox.TabIndex = 1;
                // 
                // label2
                // 
                this.label2.AutoSize = true;
                this.label2.Location = new System.Drawing.Point(13, 57);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(53, 13);
                this.label2.TabIndex = 2;
                this.label2.Text = "&Password";
                // 
                // passwordTextBox
                // 
                this.passwordTextBox.Location = new System.Drawing.Point(13, 74);
                this.passwordTextBox.Name = "passwordTextBox";
                this.passwordTextBox.PasswordChar = '*';
                this.passwordTextBox.Size = new System.Drawing.Size(157, 20);
                this.passwordTextBox.TabIndex = 3;
                // 
                // rememberMeCheckBox
                // 
                this.rememberMeCheckBox.AutoSize = true;
                this.rememberMeCheckBox.Location = new System.Drawing.Point(13, 101);
                this.rememberMeCheckBox.Name = "rememberMeCheckBox";
                this.rememberMeCheckBox.Size = new System.Drawing.Size(94, 17);
                this.rememberMeCheckBox.TabIndex = 4;
                this.rememberMeCheckBox.Text = "&Remember me";
                this.rememberMeCheckBox.UseVisualStyleBackColor = true;
                // 
                // OK
                // 
                this.OK.DialogResult = System.Windows.Forms.DialogResult.OK;
                this.OK.Location = new System.Drawing.Point(13, 125);
                this.OK.Name = "OK";
                this.OK.Size = new System.Drawing.Size(75, 23);
                this.OK.TabIndex = 5;
                this.OK.Text = "&OK";
                this.OK.UseVisualStyleBackColor = true;
                // 
                // cancel
                // 
                this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
                this.cancel.Location = new System.Drawing.Point(95, 125);
                this.cancel.Name = "cancel";
                this.cancel.Size = new System.Drawing.Size(75, 23);
                this.cancel.TabIndex = 6;
                this.cancel.Text = "&Cancel";
                this.cancel.UseVisualStyleBackColor = true;
                // 
                // Login
                // 
                this.AcceptButton = this.OK;
                this.CancelButton = this.cancel;
                this.ClientSize = new System.Drawing.Size(187, 168);
                this.Controls.Add(this.cancel);
                this.Controls.Add(this.OK);
                this.Controls.Add(this.rememberMeCheckBox);
                this.Controls.Add(this.passwordTextBox);
                this.Controls.Add(this.label2);
                this.Controls.Add(this.usernameTextBox);
                this.Controls.Add(this.label1);
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
                this.MaximizeBox = false;
                this.MinimizeBox = false;
                this.Name = "Login";
                this.Text = "Login";
                this.ResumeLayout(false);
                this.PerformLayout();
    
            }
        }
    
    }
    

يمكنك الآن تشغيل تطبيق و راجع يظهر صندوق حوار تسجيل الدخول. لاختبار التعليمة البرمجية هذه، حاول مؤهلات اعتماد مختلفة، وكلاهما صحيح و صحيح، و التأكد من أنه يمكنك الوصول إلى النموذج فقط باستخدام بيانات اعتماد صالحة. توجد أسماء مستخدم صالح الموظفين و المدير باستخدام كلمات المرور الموظف! و مدير! على التوالي.

ملاحظة

لا تقم بتحديد تذكر لي عند هذه النقطة أو لن تتمكن من تسجيل الدخول كمستخدم آخر إلى أن تقوم بتنفيذ تسجيل الخروج لاحقاً في هذه معاينة.

إضافة وظيفة تستند إلى دور

في إجراء التالي، يمكنك إضافة زر إلى النموذج و عرضه فقط للمستخدمين في دور المدير.

لتغيير واجهة مستخدم استناداً إلى دور مستخدم

  1. في مستكشف الحل ، في مشروع ClientAppServicesDemo، تحديد Form1 وقم بتحديد عرض | مصمم من Visual Studioقائمة الرئيسية.

  2. في المصمم، إضافة Buttonعنصر التحكم إلى النموذج من من مربع الأدوات.

  3. في الإطار خصائص، قم بتعيين الخصائص التالية للزر.

    الخصائص

    Value

    اسم

    managerOnlyButton

    Text

    & المدير المهمة

    Visible

    False

  4. في محرر تعليمات برمجية ل Form1، إضافة التعليمة البرمجية التالية إلى النهاية Form1_Loadالأسلوب.

    باستدعاء هذه التعليمة البرمجية DisplayButtonForManagerRoleالأسلوب الذي سوف إضافة في الخطوة التالية.

    DisplayButtonForManagerRole()
    
    DisplayButtonForManagerRole();
    
  5. إضافة الأسلوب التالي إلى إنهاء الفئة Form1.

    This method calls the IsInRole method of the IPrincipal returned by the static Thread.CurrentPrincipal property. لتكوين تطبيقات إلى استخدام الخدمات تطبيق العميل، تقوم هذه خاصية بإرجاع ClientRolePrincipal. لأن هذا فئة يطبق IPrincipalالواجهة، لا تحتاج إلى الرجوع إليه بشكل صريح.

    إذا كان مستخدم هو في دور "المدير"، DisplayButtonForManagerRoleمجموعات أسلوب Visibleخاصية managerOnlyButtonإلى true. بهذه الطريقة أيضا عرض رسالة إعلام بالخطأ إذا WebExceptionهو تم طرح، الذي يشير إلى عدم توفر الخدمة أدوار.

    ملاحظة

    IsInRoleأسلوب دوماً سترجع falseعند تسجيل الدخول للمستخدم صلاحية. سوف لا يحدث هذا إذا كان تطبيق الخاص بك باستدعاء IsInRoleالأسلوب مرة واحدة بعد وقت قصير من مصادقة، كـ هو موضح في المثال تعليمات برمجية لهذه معاينة. إذا كان يجب أن تطبيق الخاص بك باسترداد أدوار المستخدمين في اﻷحيان غير ذلك، قد تحتاج إلى إضافة تعليمات برمجية revalidate المستخدمين تسجيل الدخول الخاصة به التي انتهت مدة صلاحيتها. إذا تم تعيين الجميع مستخدمين صالحين إلى الأدوار، يمكنك تحديد ما إذا كانت صلاحية تسجيل الدخول بواسطة استدعاء ClientRoleProvider.GetRolesForUserالأسلوب. في حالة عدم وجود أدوار إرجاع، انتهت تسجيل الدخول. للحصول على مثال لهذه الوظيفة، انظر في GetRolesForUserالأسلوب. Th هو وظيفة هو عند الضرورة فقط في حالة تحديد يقوم المستخدمون بتسجيل الدخول مرة أخرى عند انتهاء صلاحية ملف تعريف ارتباط للخادم في تكوين التطبيق الخاص بك. لمزيد من المعلومات، راجع كيفية القيام بما يلي: تكوين عميل الخدمات تطبيق.

    Private Sub DisplayButtonForManagerRole()
    
        Try
    
            If Thread.CurrentPrincipal.IsInRole("manager") Then
    
                managerOnlyButton.Visible = True
    
            End If
    
        Catch ex As System.Net.WebException
    
            MessageBox.Show("Unable to access the roles service.", _
                "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    
        End Try
    
    End Sub
    
    private void DisplayButtonForManagerRole()
    {
        try
        {
            if (Thread.CurrentPrincipal.IsInRole("manager"))
            {
                managerOnlyButton.Visible = true;
            }
        }
        catch (System.Net.WebException)
        {
            MessageBox.Show("Unable to access the role service.",
                "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
    

إذا مصادقة هو ناجحاً، يقوم موفر مصادقة العميل بتعيين Thread.CurrentPrincipalخاصية لمثيل ClientRolePrincipalفئة. Th هو تطبيق فئة IsInRoleأسلوب حيث العمل هو تفويض إلى موفر الدور المكونة. كـ قبل، لا تتطلب تعليمات برمجية للتطبيق الخاص بك مرجع مباشر إلى موفر الخدمة.

يمكنك الآن تشغيل تطبيق وقم بتسجيل الدخول كموظف لمشاهدة التي زر لم تظهر، ثم قم بتسجيل كمدير لمشاهدة زر.

الوصول إلى إعدادات ويب

في إجراء التالي، يمكنك إضافة صندوق نص إلى النموذج و ربطه بأحد إعدادات ويب. في التعليمة البرمجية السابق الذي يستخدم مصادقة و لا يتم الوصول الأدوار، والتعليمات البرمجية للإعدادات الخاصة بك إلى موفر إعدادات مباشرة. بدلاً من ذلك، فإنه يستخدم بشدة كتابة Settingsفئة (الوصول إليها ك Properties.Settings.Defaultفي C# و My.Settingsفي Visual Basic) التي تم إنشاؤها للمشروع الخاص بك بواسطة Visual Studio.

إلى استخدام إعدادات ويب في واجهة مستخدم الخاصة بك

  1. تأكد من أن خادم تطوير ويب ASP.NET هو لا تزال تشغيل عن طريق التحقق من مساحة إعلام من شريط المهام. إذا قمت بإيقاف الملقم، ثم إعادة تشغيل تطبيق (الذي يبدأ الملقم تلقائياً) بإغلاق تسجيل الدخول صندوق حوار.

  2. في من مستكشف الحلول، تحديد مشروع ClientAppServicesDemo، و ثم في قائمة مشروع ، تحديد خصائص ClientAppServicesDemo .

    يظهر مصمم مشروع.

  3. في التبويب إعدادات ، انقر فوق تحميل إعدادات ويب.

    يظهر صندوق حوار تسجيل الدخول إلى .

  4. Enter الزر الزر بيانات اعتماد للموظف أو مدير و انقر فوق يسجل في . سيستخدم ويب إعداد هو تكوين للوصول من قبل المستخدمين المصادق عليهم فقط، حيث لا يؤدي النقر فوق تسجيل الدخول إلى 'تخطي' "يتم تحميل أية إعدادات.

    WebSettingsTestTextيظهر إعداد في مصمم مع القيمة افتراضية ل DefaultText. بالإضافة إلى ذلك، على Settingsالفئة التي تحتوي على WebSettingsTestTextخاصية هو التي تم إنشاؤها للمشروع الخاص بك.

  5. في مستكشف الحل ، في مشروع ClientAppServicesDemo، تحديد Form1 وقم بتحديد عرض | مصمم من Visual Studioقائمة الرئيسية.

  6. في مصمم، إضافة TextBoxعنصر التحكم إلى النموذج.

  7. في خصائص نافذة، عين القيمة webSettingsTestTextBox (الاسم).

  8. في محرر تعليمات برمجية، إضافة التعليمة البرمجية التالية إلى النهاية Form1_Loadالأسلوب.

    باستدعاء هذه التعليمة البرمجية BindWebSettingsTestTextBoxالأسلوب الذي سوف إضافة في الخطوة التالية.

    BindWebSettingsTestTextBox()
    
    BindWebSettingsTestTextBox();
    
  9. إضافة الأسلوب التالي إلى إنهاء الفئة Form1.

    يربط هذا الأسلوب Textخاصية webSettingsTestTextBoxإلى WebSettingsTestTextخاصية Settingsالفئة التي تم إنشاؤها مسبقاً في هذا إجراء. Th هو الأسلوب أيضا dهوplays رسالة خطأ إذا WebExceptionهو طرح، الذي يشير إلى التي الخدمة إعدادات ويب هو غير متوفرة.

    Private Sub BindWebSettingsTestTextBox()
    
        Try
    
            Me.webSettingsTestTextBox.DataBindings.Add("Text", _
                My.Settings, "WebSettingsTestText")
    
        Catch ex As WebException
    
            MessageBox.Show("Unable to access the Web settings service.", _
                "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
    
        End Try
    
    End Sub
    
    private void BindWebSettingsTestTextBox()
    {
        try
        {
            this.webSettingsTestTextBox.DataBindings.Add("Text",
                Properties.Settings.Default, "WebSettingsTestText");
        }
        catch (WebException)
        {
            MessageBox.Show("Unable to access the Web settings service.",
                "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
    

    ملاحظة

    سيستخدم ربط بيانات بشكل عام إلى تمكين auإلىmatic اتصال ثنائي الاتجاه بين عنصر تحكم وإعداد ويب. ومع ذلك، يمكنك أيضا الوصول إلى إعدادات ويب مباشرة كما هو موضح في المثال التالي:

    webSettingsTestTextBox.Text = My.Settings.WebSettingsTestText
    
    webSettingsTestTextBox.Text =
        Properties.Settings.Default.WebSettingsTestText;
    
  10. في المصمم، تحديد النموذج، و ثم في الإطار خصائص ، انقر فوق الزر الأحداث.

  11. تحديد FormClosingحدث ومن ثم اضغط Enter الزر لإنشاء معالج الأحداث.

  12. تم إنشاؤه باستبدال أسلوب مع تعليمات برمجية التالية.

    FormClosingاستدعاءات معالج حدث SaveSettingsالأسلوب، الذي هو تستخدم أيضا بوظيفة تسجيل الخروج تقوم بإضافته في مقطع التالي. SaveSettingsأولاً أسلوب يؤكد أن لا تسجيل مستخدم الخارجي. يقوم بذلك عن طريق يتم الآن التدقيق من AuthenticationTypeخاصية IIdentityالتي يتم إرجاعها بواسطة أساسي الحالي. The current principal is retrieved through the static CurrentPrincipal property. إذا تمت مصادقة على مستخدم لخدمات تطبيق العميل، يكون نوع مصادقة "ClientForms". SaveSettingsلا فقط الأسلوب فحص IIdentity.IsAuthenticatedخاصية لأنه قد يكون للمستخدم هوية Windows صالحة بعد تسجيل الخروج.

    إذا لم يحتوي على مستخدم تسجيل خارج، SaveSettingsأسلوب المكالمات Saveأسلوب من Settingsالفئة التي تم إنشاؤها مسبقاً في هذا إجراء. وهذا أسلوب يمكن أن يقوم بطرح WebExceptionإذا انتهت صلاحية ملف تعريف ارتباط مصادقة. يحدث هذا فقط إذا قمت بتحديد يقوم المستخدمون ب يسجل على مرة أخرى حينما ملقم ملف تعريف ارتباط انتهاء في تكوين التطبيق الخاص بك. لمزيد من المعلومات، راجع كيفية القيام بما يلي: تكوين عميل الخدمات تطبيق. SaveSettingsصلاحية ملف تعريف ارتباط المقابض الطريقة بواسطة استدعاء ValidateUserلتسجيل الدخول في عرض صندوق حوار. إذا قام مستخدم بتسجيل ب نجاح، SaveSettingsمحاولات أسلوب إلى حفظ الإعدادات مرة أخرى عن طريق استدعاء نفسه.

    مثل في تعليمات برمجية السابقة، SaveSettingsdهوplays أسلوب رسالة خطأ إذا كانت الخدمة البعيدة هو غير متوفرة. إذا كان لا يمكن الوصول إلى إعدادات موفر الخدمة بعيد، لا يزال يتم تم الحفظ الإعدادات في لذاكرة التخزين المؤقت المحلية و إعادة تحميل عند إعادة تشغيل تطبيق.

    Private Sub Form1_FormClosing(ByVal sender As Object, _
        ByVal e As FormClosingEventArgs) Handles Me.FormClosing
    
        SaveSettings()
    
    End Sub
    
    Private Sub SaveSettings()
    
        ' Return without saving if the authentication type is not
        ' "ClientForms". This indicates that the user is logged out.
        If Not Thread.CurrentPrincipal.Identity.AuthenticationType _
            .Equals("ClientForms") Then Return
    
        Try
    
            My.Settings.Save()
    
        Catch ex As WebException
    
            If ex.Message.Contains("You must log on to call this method.") Then
    
                MessageBox.Show( _
                    "Your login has expired. Please log in again to save " & _
                    "your settings.", "Attempting to save settings...")
    
                Dim isAuthorized As Boolean = False
    
                Try
    
                    ' Call ValidateUser with empty strings in order to 
                    ' display the login dialog box configured as a 
                    ' credentials provider.
                    If Not Membership.ValidateUser( _
                        String.Empty, String.Empty) Then
    
                        MessageBox.Show("Unable to authenticate. " & _
                            "Settings were not saved on the remote service.", _
                            "Not logged in", MessageBoxButtons.OK, _
                            MessageBoxIcon.Error)
    
                    Else
    
                        ' Try again.
                        SaveSettings()
    
                    End If
    
                Catch ex2 As System.Net.WebException
    
                    MessageBox.Show( _
                        "Unable to access the authentication service. " & _
                        "Settings were not saved on the remote service.", _
                        "Not logged in", MessageBoxButtons.OK, _
                        MessageBoxIcon.Warning)
    
                End Try
    
            Else
    
                MessageBox.Show("Unable to access the Web settings service. " & _
                    "Settings were not saved on the remote service.", _
                    "Not logged in", MessageBoxButtons.OK, _
                    MessageBoxIcon.Warning)
    
            End If
    
        End Try
    
    End Sub
    
    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        SaveSettings();
    }
    
    private void SaveSettings()
    {
        // Return without saving if the authentication type is not
        // "ClientForms". This indicates that the user is logged out.
        if (!Thread.CurrentPrincipal.Identity.AuthenticationType
          .Equals("ClientForms")) return;
    
        try
        {
            Properties.Settings.Default.Save();
        }
        catch (WebException ex)
        {
            if (ex.Message.Contains("You must log on to call this method."))
            {
                MessageBox.Show(
                    "Your login has expired. Please log in again to save " +
                    "your settings.", "Attempting to save settings...");
    
                try
                {
                    // Call ValidateUser with empty strings in order to 
                    // display the login dialog box configured as a 
                    // credentials provider.
                    if (!Membership.ValidateUser(String.Empty, String.Empty))
                    {
                        MessageBox.Show("Unable to authenticate. " +
                            "Settings were not saved on the remote service.",
                            "Not logged in", MessageBoxButtons.OK, 
                            MessageBoxIcon.Error);
                    }
                    else
                    {
                        // Try again.
                        SaveSettings();
                    }
                }
                catch (System.Net.WebException)
                {
                    MessageBox.Show(
                        "Unable to access the authentication service. " +
                        "Settings were not saved on the remote service.",
                        "Not logged in", MessageBoxButtons.OK, 
                        MessageBoxIcon.Warning);
                }
            }
            else
            {
                MessageBox.Show("Unable to access the Web settings service. " +
                    "Settings were not saved on the remote service.", 
                    "Not logged in", MessageBoxButtons.OK, 
                    MessageBoxIcon.Warning);
            }
        }
    }
    
  13. إضافة الأسلوب التالي إلى إنهاء الفئة Form1.

    وهذا تعليمات برمجية معالجة ClientSettingsProvider.SettingsSavedالأحداث وتعرض تعذر تم الحفظ رسالة تحذير إذا كان أي من الإعدادات. SettingsSavedلا يتم إجراء حدث في حالة الخدمة إعدادات هو غير متوفر أو إذا انتهت صلاحية ملف تعريف ارتباط مصادقة. من أمثلة متى SettingsSavedسوف يتم إجراء حدث هو إذا تم تسجيل دخول مستخدم مسبقاً خارج. يمكنك اختبار معالج حدث هذا بواسطة إضافة تعليمات برمجية لتسجيل الخروج إلى SaveSettingsأسلوب مباشرة قبل Saveاستدعاء الأسلوب. تعليمات برمجية لتسجيل الخروج والتي يمكن استخدامها هو هو موضح في مقطع التالي.

    Private WithEvents settingsProvider As ClientSettingsProvider = My.Settings _
        .Providers("System.Web.ClientServices.Providers.ClientSettingsProvider")
    
    Private Sub Form1_SettingsSaved(ByVal sender As Object, _
        ByVal e As SettingsSavedEventArgs) _
        Handles settingsProvider.SettingsSaved
    
        ' If any settings were not saved, display a list of them.
        If e.FailedSettingsList.Count > 0 Then
    
            Dim failedSettings As String = String.Join( _
                Environment.NewLine, e.FailedSettingsList.ToArray())
    
            Dim message As String = String.Format("{0}{1}{1}{2}", _
                "The following setting(s) were not saved:", _
                Environment.NewLine, failedSettings)
    
            MessageBox.Show(message, "Unable to save settings", _
                MessageBoxButtons.OK, MessageBoxIcon.Warning)
    
        End If
    
    End Sub
    
    private void Form1_SettingsSaved(object sender,
        SettingsSavedEventArgs e)
    {
        // If any settings were not saved, display a list of them.
        if (e.FailedSettingsList.Count > 0)
        {
            String failedSettings = String.Join(
                Environment.NewLine,
                e.FailedSettingsList.ToArray());
    
            String message = String.Format("{0}{1}{1}{2}",
                "The following setting(s) were not saved:",
                Environment.NewLine, failedSettings);
    
            MessageBox.Show(message, "Unable to save settings",
                MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }
    
  14. C#، إضافة التعليمة البرمجية التالية إلى النهاية Form1_Loadالأسلوب. إقران هذه تعليمات برمجية أسلوب قمت بإضافته في الخطوة الأخيرة مع SettingsSavedحدث.

    ((ClientSettingsProvider)Properties.Settings.Default.Providers
        ["System.Web.ClientServices.Providers.ClientSettingsProvider"])
        .SettingsSaved += 
        new EventHandler<SettingsSavedEventArgs>(Form1_SettingsSaved);
    

إلى اختبار تطبيق عند هذه النقطة، تشغيل عدة مرة/مرات كالموظف والمدير، واكتب قيم مختلفة في إلى صندوق نص. سوف تستمر قيم عبر جلسات العمل تشغيل أساس كل مستخدم.

قم بتنفيذ تسجيل الخروج

عندما يقوم مستخدم بتحديد تذكر لي فحص صندوق عند تسجيل الدخول، سيتم تطبيق شكل تلقائي بمصادقة مستخدم على تشغيل اللاحقة. مصادقة التلقائي ثم يستمر أثناء تطبيق هو في الالوضع غير متصل أو حتى مصادقة لملفات تعريف الارتباط انتهاء صلاحيتها. في بعض الأحيان، على الرغم من ذلك، بحاجة للعديد من المستخدمين الوصول إلى تطبيق أو مستخدم مفرد قد أحياناً يسجل في بمؤهلات اعتماد مختلفة. إلى تمكين هذا السيناريو، يجب تطبيق وظيفة تسجيل الخروج، كما هو موضح في إجراء التالي.

إلى تنفيذ وظيفة تسجيل الخروج

  1. في مصمم Form1، إضافة Buttonعنصر التحكم إلى النموذج من من مربع الأدوات.

  2. في الإطار خصائص ، حدد القيمة (اسم) يسجل outButton والقيمة نص من & يسجل للخارج.

  3. انقر نقراً مزدوجاً فوق logoutButإلىn إلى إنشاء Clickمعالج الحدث.

    يظهر محرر تعليمات برمجية باستخدام رأس المؤشر في logoutButton_Clickأسلوب.

  4. قم باستبدال المنشأ logoutButton_Clickأسلوب مع تعليمات برمجية التالية.

    معالج حدث هذا أولاً باستدعاء SaveSettingsأسلوب التي قمت بإضافتها في مقطع السابق. ثم، حدث باستدعاء معالج ClientFormsAuthenticationMembershipProvider.Logoutالأسلوب. إذا كانت خدمة مصادقة التي هو غير متوفرة، Logoutسيتم طرح أسلوب WebException. في هذه الحالة، logoutButton_Clickأسلوب عرض رسالة تحذير و التبديل مؤقتاً إلى الوضع دون اتصال يسجل تسجيل مستخدم. الوضع غير متصل هو هو موضح في مقطع التالي.

    تسجيل الخروج بحذف ملفات تعريف الارتباط المصادقة المحلية حتى تسجيل الدخول التي ستكون مطلوبة عند تطبيق هو إعادة تشغيل. بعد تسجيل الخروج، معالج الأحداث بإعادة تشغيل تطبيق. عند إعادة تشغيل تطبيق، فإنه يعرض رسالة ترحيب متبوعاً مربع حوار تسجيل الدخول صندوق. يجعل من مسح رسالة الترحيب التي تقوم بإعادة تشغيل تطبيق. يؤدي ذلك إلى منع التشويش المحتملة إذا كان يجب أن مستخدم يسجل بحفظ الإعدادات، ومن ثم يجب أن يسجل في مرة أخرى نظراً لإعادة تشغيل تطبيق.

    Private Sub logoutButton_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles logoutButton.Click
    
        SaveSettings()
    
        Dim authProvider As ClientFormsAuthenticationMembershipProvider = _
            CType(System.Web.Security.Membership.Provider,  _
            ClientFormsAuthenticationMembershipProvider)
    
        Try
    
            authProvider.Logout()
    
        Catch ex As WebException
    
            MessageBox.Show("Unable to access the authentication service." & _
                Environment.NewLine & "Logging off locally only.", _
                "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
            ConnectivityStatus.IsOffline = True
            authProvider.Logout()
            ConnectivityStatus.IsOffline = False
    
        End Try
    
        Application.Restart()
    
    End Sub
    
    private void logoutButton_Click(object sender, EventArgs e)
    {
        SaveSettings();
    
        ClientFormsAuthenticationMembershipProvider authProvider =
            (ClientFormsAuthenticationMembershipProvider)
            System.Web.Security.Membership.Provider;
    
        try
        {
            authProvider.Logout();
        }
        catch (WebException ex)
        {
            MessageBox.Show("Unable to access the authentication service." +
                Environment.NewLine + "Logging off locally only.",
                "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            ConnectivityStatus.IsOffline = true;
            authProvider.Logout();
            ConnectivityStatus.IsOffline = false;
        }
    
        Application.Restart();
    }
    

إلى اختبار الأداء الوظيفي لتسجيل الخروج وقم بتشغيل تطبيق وحدد تذكر لي في صندوق الحوار تسجيل الدخول. بعد ذلك، يغلق وإعادة تشغيل تطبيق للتأكد من أنه لم يعد لديك إلى يسجل في. وأخيراً، أعد تشغيل تطبيق بواسطة النقر فوق يسجل الخارج.

تمكين الوضع غير متصل

في إجراء التالي، بإضافة خانة اختيار إلى النموذج إلى تمكن مستخدم من إلى الدخول في الوضع غير متصل. Your application indicates offline mode by setting the static ConnectivityStatus.IsOffline property to true. حالة دون اتصال هو مخزنة تشغيل dهوk قرص الثابت المحلي في الموقع المشار إليه بواسطة Application.UserAppDataPathخاصية. Th هو يعني حالة دون اتصال هو مخزنة تشغيل كل مستخدم، bas كل تطبيق هو.

في دون اتصال الوضع الخدمة تطبيق العميل الجميع طلبات استرداد بيانات من ذاكرة تخزين مؤقت المحلي بدلاً من محاولة الوصول إلى الخدمات. في تكوين الافتراضي، يتضمن البيانات المحلية شكل مشفر من كلمة مرور مستخدم. وهذا يمكن مستخدم من إلى تسجيل الدخول أثناء تطبيق في الوضع غير متصل. لمزيد من المعلومات، راجع كيفية القيام بما يلي: تكوين عميل الخدمات تطبيق.

لتمكين الوضع غير متصل في تطبيق الخاص بك

  1. في مستكشف الحل ، في مشروع ClientAppServicesDemo، تحديد Form1 وقم بتحديد عرض | مصمم من Visual Studioقائمة الرئيسية.

  2. في مصمم، إضافة CheckBoxعنصر التحكم إلى النموذج.

  3. في الإطار خصائص ، حدد (اسم) بالقيمة workOfflineCheckBox و القيمة نص من & العمل بدون اتصال.

  4. في الإطار خصائص ، انقر فوق أحداث زر.

  5. تحديد CheckedChangedحدث ومن ثم اضغط Enter الزر لإنشاء معالج الأحداث.

  6. تم إنشاؤه باستبدال أسلوب مع تعليمات برمجية التالية.

    وهذا تعليمات برمجية تحديث IsOfflineالقيمة وصمت revalidates المستخدمين عند قيامهم بالعودة إلى الوضع عبر إنترنت. ClientFormsIdentity.RevalidateUserيستخدم الأسلوب أوراق الاعتماد المخزنة مؤقتاً بحيث يمكن للمستخدم لم يكن بشكل واضح يسجل بوصة إذا كانت الخدمة مصادقة هو غير متوفر، تظهر رسالة تحذير ويبقى تطبيق دون اتصال.

    ملاحظة

    RevalidateUserأسلوب هو وذلك فقط. لأنه ليس له القيمة إرجاع، لا تشير إلى ما إذا كان فشل revalidation. revalidation قد تفشل، تشغيل سبيل المثال، إذا قمت بتغيير بيانات اعتماد مستخدم تشغيل الخادم. في هذه الحالة، قد تحتاج إلى تضمين تعليمات برمجية التحقق التي بوضوح من المستخدمين بعد فشل نداء الخدمة. ل المزيد من المعلومات، راجع القسم "الوصول إلى إعدادات ويب" سابقا في هذه معاينة.

    بعد revalidation، وهذا تعليمات برمجية حفظ أية تغييرات على إعدادات ويب المحلي بواسطة استدعاء SaveSettingsالأسلوب الذي قمت بإضافته سابقا. فإنه يسترد أي قيم جديدة تشغيل الملقم ثم بواسطة استدعاء Reloadالأسلوب للمشروع Settingsclكـs (الوصول إلى كـ Properties.Settings.Defaultفي C# و My.Settingsفي Visual Basic).

    Private Sub workOfflineCheckBox_CheckedChanged( _
        ByVal sender As Object, ByVal e As EventArgs) _
        Handles workOfflineCheckBox.CheckedChanged
    
        ConnectivityStatus.IsOffline = workOfflineCheckBox.Checked
    
        If Not ConnectivityStatus.IsOffline Then
    
            Try
    
                ' Silently re-validate the user.
                CType(System.Threading.Thread.CurrentPrincipal.Identity,  _
                    ClientFormsIdentity).RevalidateUser()
    
                ' If any settings have been changed locally, save the new
                ' new values to the Web settings service.
                SaveSettings()
    
                ' If any settings have not been changed locally, check 
                ' the Web settings service for updates. 
                My.Settings.Reload()
    
            Catch ex As WebException
    
                MessageBox.Show( _
                    "Unable to access the authentication service. " & _
                    Environment.NewLine + "Staying in offline mode.", _
                    "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning)
                workOfflineCheckBox.Checked = True
    
            End Try
    
        End If
    
    End Sub
    
    private void workOfflineCheckBox_CheckedChanged(
        object sender, EventArgs e)
    {
        ConnectivityStatus.IsOffline = workOfflineCheckBox.Checked;
        if (!ConnectivityStatus.IsOffline)
        {
            try
            {
                // Silently re-validate the user.
                ((ClientFormsIdentity)
                    System.Threading.Thread.CurrentPrincipal.Identity)
                    .RevalidateUser();
    
                // If any settings have been changed locally, save the new
                // new values to the Web settings service.
                SaveSettings();
    
                // If any settings have not been changed locally, check 
                // the Web settings service for updates. 
                Properties.Settings.Default.Reload();
            }
            catch (WebException)
            {
                MessageBox.Show(
                    "Unable to access the authentication service. " +
                    Environment.NewLine + "Staying in offline mode.",
                    "Warning", MessageBoxButtons.OK,
                    MessageBoxIcon.Warning);
                workOfflineCheckBox.Checked = true;
            }
        }
    }
    
  7. قم بإضافة ما يلي تعليمات برمجية إلى إنهاء Form1_Loadأسلوب للتأكد من أن تعرض خانة الاختيار الحالي الاتصال الحالة.

    workOfflineCheckBox.Checked = ConnectivityStatus.IsOffline
    
    workOfflineCheckBox.Checked = ConnectivityStatus.IsOffline;
    

ويكمل هذا تطبيق مثال. اختبار القدرة على العمل بدون اتصال، قم بتشغيل تطبيق، يسجل في أما الموظفين أو مدير، و العمل بدون اتصال ثم حدد . قم بتعديل القيمة في صندوق نص، و ثم إغلاق تطبيق. إعادة التشغيل تطبيق. قبل يسجل، انقر نقراً مزدوجاً فوق رمز الملقم تطوير ASP.NET في ناحية إعلام من شريط المهام ومن ثم انقر فوق إيقاف. وبعد ذلك، يسجل في المثيل عادي. حتى في حالة الخادم هو ليس تشغيل، يمكن مازال تسجيل الدخول. قم بتعديل قيمة صندوق نص، والإنهاء، ثم إعادة تشغيل إلى رؤية القيمة التي تم تعديلها.

ملخص

في هذه معاينة، فتعرفت على كيفية إلى تمكين واستخدام الخدمات التطبيق العميل في تطبيق Windows Forms. بعد إعداد خادم اختبارات، قمت بإضافة التعليمة البرمجية إلى تطبيق الخاص بك إلى مصادقة مستخدمين واسترداد أدوار مستخدم وإعدادات تطبيق من الملقم. كما تعلمت كيفية تمكين الوضع عدم الاتصالية بحيث يستخدم تطبيق الخاص بك محلي خدمات بيانات ذاكرة التخزين المؤقت بدلاً من البعيد عند الاتصالية هو غير متاح.

الخطوات التالية

في تطبيق الحقيقي، سيتم الوصول إلى بيانات للعديد من المستخدمين من الخادم بعيد قد دائماً يكون غير متوفر أو قد انتقال إلى أسفل دون إشعار. لجعل تطبيق الخاص بك قوية، يجب أن إجابتك مناسب للحالات الموقع الخدمة هو غير متوفر. Th هو يتضمن معاينة حاول/catch كتل لجذب WebExceptionو dهوplay رسالة خطأ ومتى الخدمة هو غير متوفرة. في تعليمات برمجية الخاصة بالإنتاج، قد تحتاج لمعالجة هذه الحالة بالتبديل إلى الوضع غير متصل أو إنهاء تطبيق أو رفض الوصول إلى وظائف معينة.

إلى زيادة الأمان تطبيق الخاص بك، تأكد من إلى تماما باختبار تطبيق والخادم قبل توزيع.

راجع أيضًا:

المهام

كيفية القيام بما يلي: تكوين عميل الخدمات تطبيق

الإرشادات التفصيلية: استخدام خدمات تطبيقات ASP.NET

المبادئ

نظرة عامة حول الخدمات تطبيق العميل

موارد أخرى

تطبيق العميل الخدمات

أداة إدارة مواقع ويب ASP.NET

إنشاء ثم تكوين قاعدة بيانات خدمات التطبيق لـ SQL Server