2016-09-14 18 views
9

Azure Active Directory'ye sertifika tabanlı kimlik doğrulaması kullanmak için birkaç .NET uygulaması kurmaya çalışıyorum ve daha sonra Access'e erişim yetkisi vermek için Active Directory'yi kullanıyorum. Sql Azure DB.Yenileme Sql Bağlantısı Azure Uzun ömürlü Entity Framework Bağlamında AD erişim belirteci

İçine çalıştırıyorum sorun uygulamanın bazı bölümleri çok uzun biraz yaşayabilecek bir DBContext kullanmalarıdır. ADAL kitaplığı, sona erdikten sonra 5 dakika içinde girerseniz erişim belirtecini yenilemeye çalışır. Sorun şu ki, bazı DbContexts'larım 5 dakikadan uzun süre yaşayabilir. Bu nedenle, DbContext'in ömrü boyunca erişim belirteci artık iyi değil ve SaveChanges'i denediğimde bir veritabanı bağlantısı istisnası alıyorum.

dışında üstlenmeden benim DbContexts Bunu düzeltmek için yapabileceğim bir şey var, 5 dakikadan daha sık yaşamak yapılır? Denedim

tek şey süresi dolmuş erişim belirteci durum yakalamak ve daha sonra yeni bir erişim belirteci olan bir yeni oluşturulan bir geçerli bağlantı yerini alabilecek Entity Framework bazı kanca bulmaktı. EF'i özel bir bağlantı fabrikasından geçirmeyi ve ardından süresi dolmuş bir belirti istisnası aldığımda yeniden denemek üzere bir Yürütme Stratejisi kullanmayı denedim. Bu benim için çalışmıyor, çünkü mevcut bağlantıyı özel bir yürütme stratejisinden değiştiremiyorum veya yeniden oluşturamıyorum.

Herhangi bir fikir büyük takdir.

Teşekkürler! Eğer gücün varsa

+0

Bu, kötü bir fikir gibi geliyor. Bir bağlam, bir iş birimi için yaşamak için tasarlanmıştır, 5 dakika, aynı bağlamda çok sayıda iş yaptığınız gibi geliyor. Bu, bir bağlamda çok fazla şey yaparsanız yüksek bellek ayak izi ve düşük performans gibi diğer sorunlara neden olur. Benim tavsiyem, kodunuzu yeniden düzenlemektir (bu sorundan bağımsız olarak) –

+0

Kimlik belgenizi hangi EF sürümünü kullandığınızı kesinleştirebilir misiniz? – GaelSa

+0

Erişim belirtecini DbContext'e nasıl geçiriyorsunuz? DbContext uzun yaşıyor olsa bile, temel DbConnection uzun yaşamıyor, her sql sorgusu için açılır ve kapatılır. –

cevap

2

kodunuzu üstlenmeden iyi seçenek kesinlikle.

Yapamazsanız, her 4 dakikada bir tetiklenecek bir zamanlayıcı ayarlayabilirsiniz ve bu zamanlayıcıda DBContext ile bazı basit sorgulamalar yapın (gerekirse, kimlik doğrulama belirtecinizi yenileyerek SaveChanges'i kullandığınızda hala geçerli olur)). DBContext'i aynı anda kullanarak basit sorguyu ve SaveChanges'i önlemek için DBContext'i bir miktar kilitle korumanız gerekir.

İlgili konular