Неожиданный конец файла.Следующие элементы не закрыты: Cookie, SecurityContextToken.Линия 1, позиция 2998 - PullRequest
6 голосов
/ 02 февраля 2012

Я реализовал аутентификацию ADFS для приложения asp.net 4.0. Я разместил приложение в производственной среде с конфигурацией webfarm. Сайт работает хорошо, и все изображения правильно отображаются в браузере IE8. Но когда я пытался просмотреть приложение в браузере Safari, веб-сайт не работал несколько раз, и изображения также не отображаются должным образом.

Используя Fiddler, я обнаружил, что иногда изображения не отображаются должным образом, и возникает следующая ошибка:

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)

Затем я попытался перейти по указанной ниже ссылке:

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

Но это также не сработало для меня. Затем я попытался остановить один сервер в конфигурации веб-фермы, а затем обнаружил, что веб-сайт работает нормально в браузере IE8 и Safari. В браузере IE8 он работает все время, и все изображения отображаются правильно, но браузер Safari не работает, если оба сервера в веб-ферме включены.

При анализе я обнаружил, что из ADFS я получаю некоторую информацию о претензиях в виде файлов cookie, и их длина больше. Для браузера IE8 длина cookie больше, а для Safari допустимый предел составляет 4097 символов.

Поэтому я подумал о том, чтобы максимально увеличить лимит cookie для браузера Safari.

Может кто-нибудь помочь мне решить эту проблему, предоставив любой пример кода.

Спасибо и С уважением, Сантош Кумар Патро

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

Теперь проблема решена путем включения постоянных файлов cookie (Sticky Sessions) на балансировщике нагрузки в сценарии веб-фермы.

2 голосов
/ 28 марта 2013

Я решил эту проблему, сократив количество претензий, возвращаемых из STSЭто уменьшит размер куки.Я вывел другое средство для получения данных, которые мне нужны, через сервис, который я внедрил.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...