2012-02-01 20 views
5

Tôi đã triển khai xác thực ADFS cho ứng dụng asp.net 4.0. Tôi đã lưu trữ ứng dụng trong môi trường sản xuất với cấu hình webfarm. Trang web hoạt động tốt và tất cả các hình ảnh được hiển thị đúng trong trình duyệt IE8. Nhưng khi tôi cố gắng duyệt ứng dụng trong trình duyệt Safari, trang web không hoạt động một số lần và hình ảnh cũng không được hiển thị đúng cách.Kết thúc tệp bất ngờ. Các phần tử sau không được đóng: Cookie, SecurityContextToken. Dòng 1, vị trí 2998

Bằng cách sử dụng Fiddler tôi phát hiện ra rằng đôi khi hình ảnh không được trả lại đúng và nó đi kèm với các lỗi sau:

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) 

sau đó tôi đã cố gắng để làm theo các liên kết dưới đây đề cập:

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

Nhưng nó cũng không làm việc cho tôi. Sau đó tôi đã cố gắng dừng một máy chủ trong cấu hình webfarm và sau đó thấy rằng trang web hoạt động tốt trong trình duyệt IE8 và Safari. Trong trình duyệt IE8, nó hoạt động mọi lúc và tất cả các hình ảnh được hiển thị đúng nhưng trình duyệt Safari không có trong trường hợp cả hai máy chủ trong webfarm đều được bật.

Trên phân tích, tôi thấy rằng từ ADFS tôi nhận được một số thông tin xác nhận quyền sở hữu ở dạng cookie và chiều dài cookie là nhiều hơn. Đối với trình duyệt IE8, chiều dài cookie nhiều hơn và đối với Safari giới hạn cho phép là 4097 ký tự.

Do đó, tôi đã nghĩ tối đa hóa giới hạn cookie cho trình duyệt Safari.

Bất kỳ ai cũng có thể giúp tôi giải quyết vấn đề này bằng cách cung cấp bất kỳ mẫu mã nào.

Cảm ơn & Kính trọng, Santosh Kumar Patro

+0

Vì vậy, câu hỏi thực tế của bạn là "Làm cách nào để tăng giới hạn cookie của Safari từ giới hạn mặc định là 4097 ký tự?" –

+0

Sự cố bắt đầu với kích thước giới hạn của cookie trong trình duyệt safari và do đó việc hiển thị hình ảnh dừng lại và vấn đề được đề cập ở trên xuất hiện trong hình ảnh. Vì vậy, có cách nào để giải quyết vấn đề này. Hơn nữa, vấn đề được đưa vào hình ảnh trong kịch bản webfarm và chỉ dành cho trình duyệt Safari. –

Trả lời

2

Vấn đề bây giờ được giải quyết bằng cách cho phép cookie liên tục (Chú ý phiên) trên cân bằng tải trong kịch bản webfarm.

1

Tôi đã xử lý vấn đề này bằng cách giảm số lượng khiếu nại được trả lại từ STS. Điều này sẽ giảm kích thước của cookie. Tôi suy ra một phương tiện khác để lấy dữ liệu tôi cần qua một dịch vụ mà tôi đã thực hiện.