2012-02-01 9 views
5

Bir asp.net 4.0 uygulaması için ADFS kimlik doğrulamasını uygulamıyorum. Uygulamayı webfarm konfigürasyonu ile üretim ortamında yaptım. Web sitesi iyi çalışıyor ve tüm görüntüler IE8 tarayıcısında düzgün bir şekilde işleniyor. Ancak, Safari tarayıcısında uygulamaya göz atmaya çalıştığımda, web sitesi bazı zamanlarda çalışmaz ve görüntüler düzgün şekilde oluşturulmaz. Beklenmeyen dosya sonu. Aşağıdaki öğeler kapalı değildir: Çerez, SecurityContextToken. 1. satır, konum 2998

Fiddler kullanarak ben resimleri düzgün işlenmez bazen bulundu ve aşağıdaki hata ile gelir:

http://social.msdn.microsoft.com/Forums/en/Geneva/thread/ea00ec3f-ebdf-427c-929f-d4a196650552

: Sonra aşağıda belirtilen bağlantıyı takip etmeye çalıştı

Exception information: 
Exception type: XmlException 
Exception message: Unexpected end of file. Following elements are not closed: Cookie, SecurityContextToken. Line 1, position 2998. 

Thread information: 
    Thread ID: 12 
    Thread account name: CT\acmeweb 
    Is impersonating: False 
    Stack trace: at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3) 
    at System.Xml.XmlExceptionHelper.ThrowUnexpectedEndOfFile(XmlDictionaryReader reader) 
    at System.Xml.XmlBaseReader.MoveToEndOfFile() 
    at System.Xml.XmlUTF8TextReader.Read() 
    at System.Xml.XmlDictionaryReader.ReadContentAsChars(Char[] chars, Int32 offset, Int32 count) 
    at System.Xml.XmlBaseReader.ReadBytes(Encoding encoding, Int32 byteBlock, Int32 charBlock, Byte[] buffer, Int32 offset, Int32 byteCount, Boolean readContent) 
    at System.Xml.XmlBaseReader.ReadContentAsBase64(Byte[] buffer, Int32 offset, Int32 count) 
    at System.Xml.XmlDictionaryReader.ReadContentAsBytes(Boolean base64, Int32 maxByteArrayContentLength) 
    at System.Xml.XmlDictionaryReader.ReadContentAsBase64(Int32 maxByteArrayContentLength, Int32 maxInitialCount) 
    at System.Xml.XmlBaseReader.ReadContentAsBase64() 
    at System.Xml.XmlDictionaryReader.ReadElementContentAsBase64() 
    at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReader reader, SecurityTokenResolver tokenResolver) 
    at Microsoft.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(Byte[] token, SecurityTokenResolver tokenResolver) 
    at Microsoft.IdentityModel.Web.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte[] sessionCookie) 
    at Microsoft.IdentityModel.Web.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken& sessionToken) 
    at Microsoft.IdentityModel.Web.SessionAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs eventArgs) 
    at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Ama benim için de işe yaramadı. Daha sonra webfarm yapılandırmasında bir sunucuyu durdurmaya çalıştım ve web sitesinin IE8 ve Safari tarayıcısında iyi çalıştığını gördüm. IE8 tarayıcısında tüm zamanlar çalışır ve tüm görüntüler düzgün bir şekilde oluşturulur, ancak webfarm'daki sunucular açıldığında Safari tarayıcısı açılmaz.

Analize göre, ADFS'den tanımlama bilgisi formunda bazı hak talep bilgileri alıyorum ve çerez uzunluğu daha fazla. IE8 tarayıcısı için çerez uzunluğu daha fazla ve Safari için izin verilen sınır 4097 karakterdir.

Bu yüzden Safari tarayıcısının tanımlama sınırını en üst düzeye çıkarmayı düşündüm.

Herhangi bir kod örneği sağlayarak bu sorunu çözmek için lütfen bana yardımcı olabilir misiniz?

Teşekkür & Selamlar, Santosh Kumar Patro

+0

Asıl sorunuzu "Safari'nin tanımlama sınırını 4097 karakterlik varsayılan sınırdan nasıl artırabilirim?" –

+0

Sorun, safari tarayıcısındaki çerezin sınırlı boyutuyla başlıyor ve bu nedenle görüntü işleme durur ve yukarıda belirtilen sorun resmin içine girer. Bu sorunu çözmek için herhangi bir yolu var. Dahası, problem sadece webfarm senaryosunda ve Safari tarayıcısı için resme dönüşüyor. –

cevap

2

sorun şimdi webfarm senaryosunda yük dengeleyici üzerinde kalıcı çerezleri (Yapışkan oturumları) sağlayarak çözüldü.

1

Bu sorunu, STS'den iade edilen hak taleplerini azaltarak ele aldım. Bu, çerezin boyutunu azaltacaktır. Uyguladığım bir hizmetle ihtiyaç duyduğum verileri elde etmenin başka bir yolunu buldum.

İlgili konular