2016-04-02 14 views
1

Projemi MSSQL'den MySQL'e taşıdım ve uygulamak zorunda olduğum özelliklerden biri de oturumları db tarafında saklama olanağı, dolayısıyla özel oturum deposu sağlayıcısının yapılandırılması gerekiyor. Oturum sağlayıcısını doğru şekilde kurmak için görsel stüdyo için MySQL bağlayıcısını kullandım. Benim uygulama db şema modifiye edilmiş ve gerekli tüm tabloları oluşturulan çalıştırmak kezÖzel MySQL oturum deposu sağlayıcısı - seri hale getirme sorunu

<connectionStrings> 
<remove name="LocalMySqlServer" /> 
<add name="LocalMySqlServer" connectionString="server=<SERVER>;user=<USER>;pwd=<PASSWORD>;port=<PORT>;database=<DBNAME>;AutoEnlist=false;" providerName="MySql.Data.MySqlClient" /> 
</connectionStrings> 

<system.web> 
<sessionState mode="Custom" cookieless="false" timeout="20" allowCustomSqlDatabase="true" regenerateExpiredSessionId="true" customProvider="MySqlSessionStateProvider"> 
    <providers> 
    <clear/> 
    <add name="MySqlSessionStateProvider" type="MySql.Web.SessionState.MySqlSessionStateStore, MySql.Web, Version=6.9.8.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="My Local Session State" connectionStringName="LocalMySqlServer" writeExceptionsToEventLog="True" autogenerateschema="True" enableExpireCallback="False" /> 
    </providers> 
</sessionState> 
... 
</system.web> 

: İşte benim web.config snippet'idir

enter image description here

Dahası, ben saptadığımızı yürütme oturumu sırasında Tablo oturum bilgisi ile doludur, bu yüzden bağlantının işe yaradığı ve MySQL özel sağlayıcısının yapması gereken şeyi yapması iyi bir sinyaldir.

enter image description here

Maalesef bir süre sonra benim uygulama System.OutOfMemoryException nedeniyle başarısız olur.

enter image description here

Benim varsayım oturumu ürün serisini kaldırma ile ilgili bazı sorun olmasıdır: gibi yığın izleme görünüyor. Bir oturumda depolanan ve hepsinin uygun [Serializable] özniteliği ile işaretlenmiş birkaç sınıfım var. Diğer öğelerin ilkel türleri vardır (bool, int ..) Yani, sorum bu başka bir soruna neden olabilir? Sorun şu ki, bu sorunun neden olduğu yerden kesin bir yer bile tespit edemiyorum. Herhangi bir öneri takdir edilir.

+0

Bu tür sorunlara, kod erişimi olmadan hata ayıklaması zordur. Sql sunucusu ile tam olarak aynı kod iyi çalıştı? Oturumunuzda sakladığınız sınıflar nelerdir? Veritabanında zaman içinde oturumların boyutunun büyüdüğünü görüyor musunuz? – Evk

+0

Sorununuz, kodda bir yerde bazı hatalar nedeniyle, SessionStateItemsCollection öğenizde daha fazla öğe depolamanızdır; sonuçta, altta yatan dizinin tümünü tutmak için yeterli büyüklükte bir bitişik bellek arabelleği ayırmak imkansız hale gelinceye kadar. öğeleri ve bu istisnai olsun. Dizi boyutu sınırları için http://stackoverflow.com/questions/5367320 veya http://stackoverflow.com/questions/23206496 adresine bakın veya belki https://blogs.msdn.microsoft.com/ericlippert/2009/06/08/dışı belleğe--ifade etmez-to-fiziksel-bellek/'. – dbc

+0

Oturum depolarınızın ne kadar büyük olduğunu ve tüm alanı ne aldığını görmek için MySQL veritabanınızı doğrudan sorgulayabiliyor musunuz? – dbc

cevap

0

Sınıflarınızdaki tüm öğelerin kamuya açık olduğunu tekrar gözden geçirebilir misiniz [özel üyeler serileştirme sırasında dikkate alınmaz].

İlgili konular