كيف يمكنني استرداد HttpContext العقارات عند إرجاع null?
-
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.