كيف يمكنني استرداد HttpContext العقارات عند إرجاع null?

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

  •  22-08-2019
  •  | 
  •  

سؤال

أنا أفعل بعض غير متزامن العمل في موضوع مستقل باستخدام:

ThreadPool.QueueUserWorkItem()

وفي هذا مؤشر ترابط منفصل اريد الاتصال HttpContext.Current بحيث لا يمكن الوصول إلى:

HttpContext.Current.Cache  
HttpContext.Current.Server  
HttpContext.Current.Request  

ومع ذلك ، HttpContext.Current باطل عند إنشاء هذا مؤشر ترابط منفصل.

السؤال

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

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

المحلول

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

ويجب تمرير كائن مع البيانات اللازمة للموضوع الخاص بك.

نصائح أخرى

يمكنك الوصول إلى ASP.NET مع ذاكرة التخزين المؤقت HttpRuntime.ذاكرة التخزين المؤقت حتى عندما لم يكن لديك HttpContext, ولكن للأسف لا يمكن الوصول إلى الخادم أو طلب.

إذا كنت تفكر في ذلك ، وهذا معنى - لا يخدمون أي صفحة حتى لا يكون طلب.

1 - إضافة التعليمات البرمجية أسفل في <system.serviceModel> في شبكة الإنترنت.ملف التكوين:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

2 - إضافة التعليمات البرمجية أسفل بعد مساحة في خدمة ويب الملف:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

3 - إعادة بناء جزء ويب المشروع.فعلت!

المرجعية

لHttpContext.Server خدمات يمكنك استخدام الطبقة HttpServerUtility. ، لذاكرة التخزين المؤقت يمكنك استخدام HttpRuntime.Cache كما قيل أعلاه. لكائن طلب يمكنك تمرير البيانات من طلب للموضوع عند إنشائه. أشياء مثل Request.QueryString أو Request.Form ... أو أيا كان.

وهناك تنفيذ ترابط التجمع هنا التي توفر نشر السياق HTTP لموضوع الاستدعاء . أنا لم تستخدم حتى الآن ولكن أخطط ل.

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

عادة ASP.Net لا يسمح لك أن تفرخ مواضيع جديدة...هنا بعد على هذا الموضوع.

هنا هو لطيف حتى كتابة على خيوط في ASP.NET من MSDN.

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