تمكين المزامنة دون اتصال لتطبيق Windows

نظرة عامة

يوضح لك هذا البرنامج التعليمي كيفية إضافة دعم دون اتصال إلى تطبيق النظام الأساسي العام لـ Windows (UWP) باستخدام خلفية تطبيق Azure Mobile. تسمح المزامنة دون اتصال للمستخدمين بالتفاعل مع تطبيق الأجهزة المحمولة - عرض البيانات أو إضافتها أو تعديلها - حتى في حالة عدم وجود اتصال بالشبكة. يتم تخزين التغييرات في قاعدة بيانات محلية. بمجرد عودة الجهاز إلى الاتصال بالإنترنت، تتم مزامنة هذه التغييرات مع الخلفية البعيدة.

في هذا البرنامج التعليمي، يمكنك تحديث مشروع تطبيق UWP من البرنامج التعليمي إنشاء تطبيق Windows لدعم ميزات تطبيقات Azure Mobile دون اتصال. إذا لم تستخدم مشروع خادم البدء السريع الذي تم تنزيله، يجب إضافة حزم ملحق الوصول إلى البيانات إلى مشروعك. لمزيد من المعلومات حول حزم ملحق الخادم، راجع العمل مع SDK خادم الواجهة الخلفية .NET لتطبيقات Azure Mobile.

لمعرفة المزيد حول ميزة المزامنة دون اتصال، راجع موضوع مزامنة البيانات دون اتصال في تطبيقات Azure Mobile.

المتطلبات

يتطلب هذا البرنامج التعليمي المتطلبات المسبقة التالية:

تحديث تطبيق العميل لدعم الميزات غير المتصلة

تسمح لك ميزات Azure Mobile App دون اتصال بالتفاعل مع قاعدة بيانات محلية عندما تكون في سيناريو غير متصل. لاستخدام هذه الميزات في تطبيقك، يمكنك تهيئة SyncContext إلى متجر محلي. ثم قم بالإشارة إلى الجدول الخاص بك من خلال واجهة IMobileServiceSyncTable . يتم استخدام SQLite كمتجر محلي على الجهاز.

  1. تثبيت وقت تشغيل SQLite النظام الأساسي العام لـ Windows.

  2. في Visual Studio، افتح مدير حزمة NuGet لمشروع تطبيق UWP الذي أكملته في البرنامج التعليمي إنشاء تطبيق Windows . ابحث عن حزمة NuGet Microsoft.Azure.Mobile.Client.SQLiteStore وقم بتثبيتها.

  3. في مستكشف الحلول، انقر بزر الماوس الأيمن فوق مراجع>إضافة مرجع...>Universal Windows>الملحقات، ثم قم بتمكين كل من SQLite النظام الأساسي العام لـ WindowsوVisual C++ 2015 Runtime للتطبيقات النظام الأساسي العام لـ Windows.

    إضافة مرجع SQLite UWP

  4. افتح الملف MainPage.xaml.cs وألغ التعليق على #define OFFLINE_SYNC_ENABLED التعريف.

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

تحديث التطبيق لقطع الاتصال بالواجهة الخلفية

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

  1. تحرير App.xaml.cs في المشروع المشترك. التعليق على تهيئة MobileServiceClient وإضافة السطر التالي، والذي يستخدم عنوان URL غير صالح لتطبيق الأجهزة المحمولة:

      public static MobileServiceClient MobileService = new MobileServiceClient("https://your-service.azurewebsites.fail");
    

    يمكنك أيضا إظهار السلوك دون اتصال عن طريق تعطيل شبكة wifi وشبكات الجوال على الجهاز أو استخدام وضع الطيران.

  2. اضغط على F5 لإنشاء التطبيق وتشغيله. لاحظ فشل المزامنة عند التحديث عند تشغيل التطبيق.

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

  4. أغلق التطبيق ثم أعد تشغيله للتحقق من استمرار العناصر الجديدة التي قمت بإنشائها في المتجر المحلي.

  5. (اختياري) في Visual Studio، افتح Server Explorer. انتقل إلى قاعدة البيانات الخاصة بك في قواعد بياناتAzure-SQL>. انقر بزر الماوس الأيمن فوق قاعدة البيانات وحدد فتح في SQL Server Object Explorer. يمكنك الآن الاستعراض للوصول إلى جدول قاعدة بيانات SQL ومحتوياته. تحقق من أن البيانات في قاعدة البيانات الخلفية لم تتغير.

  6. (اختياري) استخدم أداة REST مثل Fiddler أو Postman للاستعلام عن الخلفية للأجهزة المحمولة، باستخدام استعلام GET في النموذج https://<your-mobile-app-backend-name>.azurewebsites.net/tables/TodoItem.

تحديث التطبيق لإعادة توصيل الواجهة الخلفية لتطبيق الأجهزة المحمولة

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

عند تشغيل التطبيق لأول مرة، OnNavigatedTo يستدعي InitLocalStoreAsyncمعالج الأحداث . يستدعي SyncAsync هذا الأسلوب بدوره لمزامنة متجرك المحلي مع قاعدة البيانات الخلفية. يحاول التطبيق المزامنة عند بدء التشغيل.

  1. افتح App.xaml.cs في المشروع المشترك، وقم بإلغاء التعليق على التهيئة MobileServiceClient السابقة لاستخدام عنوان URL الصحيح لتطبيق الأجهزة المحمولة.

  2. اضغط على المفتاح F5 لإعادة إنشاء التطبيق وتشغيله. يقوم التطبيق بمزامنة التغييرات المحلية مع الواجهة الخلفية لتطبيق Azure Mobile باستخدام عمليات الدفع والسحب عند OnNavigatedTo تنفيذ معالج الأحداث.

  3. (اختياري) عرض البيانات المحدثة باستخدام إما SQL Server Object Explorer أو أداة REST مثل Fiddler. لاحظ أنه تمت مزامنة البيانات بين قاعدة بيانات الواجهة الخلفية لتطبيق Azure Mobile والمخزن المحلي.

  4. في التطبيق، انقر فوق خانة الاختيار بجانب بعض العناصر لإكمالها في المتجر المحلي.

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

ملخص واجهة برمجة التطبيقات

لدعم ميزات خدمات الجوال دون اتصال، استخدمنا واجهة IMobileServiceSyncTable وتهيئة MobileServiceClient.SyncContext مع قاعدة بيانات SQLite محلية. عند عدم الاتصال، تعمل عمليات CRUD العادية لتطبيقات الأجهزة المحمولة كما لو كان التطبيق لا يزال متصلا أثناء حدوث العمليات مقابل المتجر المحلي. يتم استخدام الطرق التالية لمزامنة المتجر المحلي مع الخادم:

  • PushAsync نظرا لأن هذا الأسلوب عضو في IMobileServicesSyncContext، يتم دفع التغييرات عبر جميع الجداول إلى الخلفية. يتم إرسال السجلات ذات التغييرات المحلية فقط إلى الخادم.
  • PullAsync يتم بدء السحب من IMobileServiceSyncTable. عند وجود تغييرات متعقبة في الجدول، يتم تشغيل دفع ضمني للتأكد من أن جميع الجداول في المتجر المحلي جنبا إلى جنب مع العلاقات تظل متسقة. تتحكم معلمة pushOtherTables في ما إذا كانت الجداول الأخرى في السياق يتم دفعها في دفع ضمني. تأخذ معلمة الاستعلام سلسلة استعلام IMobileServiceTableQuery<T> أو OData لتصفية البيانات التي تم إرجاعها. يتم استخدام المعلمة queryId لتعريف المزامنة التزايدية. لمزيد من المعلومات، راجع مزامنة البيانات دون اتصال في تطبيقات Azure Mobile.
  • PurgeAsync يجب أن يستدعي تطبيقك هذا الأسلوب بشكل دوري لإزالة البيانات القديمة من المتجر المحلي. استخدم معلمة القوة عندما تحتاج إلى إزالة أي تغييرات لم تتم مزامنتها بعد.

لمزيد من المعلومات حول هذه المفاهيم، راجع مزامنة البيانات دون اتصال في تطبيقات Azure Mobile.

مزيد من المعلومات

توفر الموضوعات التالية معلومات خلفية إضافية حول ميزة المزامنة دون اتصال لتطبيقات الأجهزة المحمولة: