2016-03-16 21 views
6

Asp.net Web API kullanırken tüm istek boyunca CallContext'e güvenilebilir mi?Web API kullanarak CallContext'e güvenebilir miyim?

decade-old blog post'u okudum ve hala geçerli olduğundan emin değilim (there'da sorulmuştur). Ben global bir filtreye verileri ayarlarsanız

Konu-Çeviklik, yani, içlerinde varsayarsak o istek-dışarı orada olacak varsaymak güvenlidir? ASP.Net konuları geçiş yapıp

+0

Ben CallContext.LogicalSetData ve zaman uyumsuz kontrolörü ile test ettik (daha önce konuları geçiş yapmak için ve sonra) ve iyi çalışıyor gibi görünüyor. Ancak bu oldukça karmaşık bir konu ve sadece basit testler yaparak emin olmak zor. – Evk

cevap

2

Sen CallContext kaybedersiniz. Zaman uyumsuz modelde, asp.net görev zamanlayıcısı mutlaka aynı parçacığı zaman uyumsuz katılmadan tekrar aynı HttpContext ile bir istek iplik çağrıları özen, ancak.

Örnek: - isteğiniz parçacığı alabilirsiniz böylece hiçbir şey yapmadan oturup olması için hiçbir neden yok o yavaş IO beklerken bir istek başlar ve o zaman uyumsuz dönmeden önce bazı yavaş IO beklemek çıkmak başka bir istek için kullanılır.

ASP.Net Thread Agility (google) büyük bir egzersiz olduğunu ve burada bu konuda büyük bir tartışma da var: CallContext vs ThreadStatic vs HttpContext

+0

CallContext.LogicalSetData ve .LogicalGetData'nın async için çalışması gerekiyor. – imukai

+0

@imukai 'CallContext' remoting için tasarlandı ve haklısınız - async için çalışmalı, ama kimin hakkında? Async'den bile önce tasarlanmıştı. Bulabildiğim herhangi bir yerde belgelenmiyor; Benim sahip olduğum tek bilgi tartışan insanların diğer konuları okumaktan ve hiç kimse asp.net içinde 'CallContext 'davranışını kabul etmek gibi görünüyor. Bu amaç için tasarlandığı gibi bir 'AsyncLocal' kullanmak daha iyidir ve * belgelenmiştir. – caesay