سؤال

السيناريو: لدي تطبيق Prism تم تطويره في Silverlight (4) ، وأنا أستخدم تطبيقًا جانبيًا لـ ASP.NET لاستضافة العديد من خدمات الويب (والذي بدوره يصل إلى خدمة WCF ، لكن هذا ليس مهمًا حقًا هنا ). يجب أن يكون تطبيق Silverlight قادرًا على الاتصال بمجال خدمات الويب (وهذا يعني أن خدمات الويب ليست بالضرورة على نفس الخادم الذي يستضيف تطبيق Silverlight).

يتكون تطبيق Silverlight من عدة وحدات ، كل منها يصل إلى خدمات الويب ASP.NET.

ليس لدي الكثير من الخبرة مع Silverlight و Prism ، ولكن بقدر ما أستطيع أن أرى ، هذا ليس سيناريو غير عادي للغاية ...

المشكلة: تحدسي هي أنه عندما تصل وحدتان مختلفتان إلى خدمات الويب ، أحصل على جلستين جديدتين على خادم الويب. كنت أعتقد أنه نظرًا لأن كلا الوحدتين يعيشان على نفس صفحة HTML (ثم في جلسة المتصفح نفسها) ، فإنهما سيحصلان على نفس الجلسة على خادم الويب ...؟

لقد حاولت جعل وكيل ويب وكيل ويب على مستوى العالم متاحًا عالميًا في الحاوية (باستخدام الوحدة) ، عن طريق تسجيل مثيل (باستخدام Container.registerInstance) ، ثم الحصول على هذه الحالة عندما تحتاج الوحدة إلى إجراء مكالمة خدمة ويب ( باستخدام Container.Resolve) ، ولكن هذا لا يبدو أنه يساعد.

ومع ذلك ، فإن أي مكالمات يتم إجراؤها في نفس الوحدة النمطية تحصل دائمًا على نفس الجلسة على الخادم.

هل يمكن لأي شخص رؤية ما أفتقده هنا ...؟

شكرًا!

جون

هل كانت مفيدة؟

المحلول

يبدو أنني وجدت إجابتي الخاصة.

كانت المشكلة هي أن طلبي كان يطلق العديد من مكالمات خدمة الويب على بدء التشغيل (عوامل المنشور المختلفة التي تعمل بشكل مستقل). وعندما تم إجراء العديد من المكالمات قبل تقديم أي ردود من خادم الويب ، لم يتم تقديم ملف تعريف ارتباط "ASP.NET_SessionID" مرة أخرى إلى العميل قبل إجراء المكالمات اللاحقة.

كان حلي هو التأكد من أنني واحد اتصل (Async كما هو الحال دائمًا) ، على سبيل المثال لخدمة الويب البسيطة التي تشبه Ping ، ثم عقد جميع المكالمات الأخرى إلى خادم الويب حتى تعود هذا الاستجابة. بعد ذلك ، يتم إعطاء جميع المكالمات اللاحقة نفس الجلسة على الخادم (لأنها الآن تحتوي جميعها على ملف تعريف الارتباط "asp.net_sessionid" في الرأس).

في Pratice ، يتم إجراء هذه الدعوة بواسطة Prism-Shell ، ولا يتم تحميل أي وحدات قبل أن أتلقى الاستجابة. ثم أنا متأكد تمامًا من أن أياً من الوحدات الأخرى لا تحصل على سعادة قبل أن يكون لدي حالة جلسة في متناول اليد.

ومع ذلك ، إذا رأى أي شخص أي مشاكل أخرى في هذا الحل ، فأنا أكثر من سعيد لسماع منك.

شكرًا!

جون

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top