كيفية توفير الكائن Session / المضيف للاستخدام في كل من ويندوز والويب التطبيق؟

StackOverflow https://stackoverflow.com/questions/236362

سؤال

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

ولقد وجدت نفسي استرجاع هذه المعلومات في جلسة طبقة عملي، كما يلي:

((UserSession)HttpContext.Current.Session["UserSession"]).User.Info

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

IHost.User.Info

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

ومساعدة تقدير.

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

المحلول

وإذا افترضنا أن طبقة رجال الأعمال هو DLL منفصل، أنا لن إضافة مرجع إلى System.Web ونتيجة لذلك أود أن أبدا استخدام الكائن Session مباشرة. وهذا من شأنه أن يؤدي إلى تصميم مختلف من طبقة رجال الأعمال والواجهات المعرضة للعميل (سواء على شبكة الإنترنت أو WinForms عناصر).

وقال ذلك، كحل سريع أود أن أقترح أن يكتب فئة مجمع في طبقة عملك الذي يخفي وجوه Session من التعليمات البرمجية. سوف مكالماتك من التعليمات البرمجية يكون شيئا مثل هذا:

((UserSession) DualContext.Current["UserSession"]).User.Info

ووسوف تنفيذ المجمع أن يكون شيئا من هذا القبيل (لم تكتمل واختبار):

public class DualContext 
{
   private Dictionary<string, object> winFormsSession = new Dictionary<string, object>();
   private static readonly DualContext instance = new DualContext();

   public static DualContext Current
   {
      get {  return instance; }
   }

   public object this[string key]
   {
      get 
      {
         if (HttpContext.Current != null)
            return HttpContext.Current.Session[key];
         else
            return winFormsSession[key];
      }
      set 
      {
         if (HttpContext.Current != null)
            HttpContext.Current.Session[key] = value;
         else
            winFormsSession[key] = value;
      }
   }
}

نصائح أخرى

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

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

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

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