All
У меня есть веб-служба WCF (давайте назовем ее службой "B"), размещенная в IIS с использованием учетной записи службы (ВМ, Windows 2003 SP2). Сервис предоставляет конечную точку, которая использует WSHttpBinding со значениями по умолчанию, за исключением maxReceivedMessageSize, maxBufferPoolSize, maxBufferSize и некоторых увеличенных тайм-аутов.
Веб-служба прошла нагрузочное тестирование с использованием платформы Visual Studio Load Test, в которой приняли участие около 800 одновременно работающих пользователей, и успешно прошла все тесты без исключений. Прокси в модульном тесте создан из конфигурации.
Существует приложение sharepoint, которое использует службу поиска Office Sharepoint Server для вызова веб-служб «A» и «B». Приложение получит данные из службы «А» для создания запроса, который будет отправлен в службу «Б». Ответ от службы "B" индексируется для поиска. Прокси создается программно с использованием ChannelFactory.
Когда услуга «А» занимает менее 10 минут, вызовы к услуге «Б» выполняются успешно. Но когда услуга «А» занимает больше времени (~ 20 минут), вызовы службы «Б» выдают следующее исключение:
Сообщение об исключении: незащищенная или неправильно защищенная ошибка была получена от другой стороны. См. Внутреннее исключение FaultException для получения кода ошибки и подробностей.
Внутреннее сообщение об исключении: сообщение не может быть обработано. Это наиболее вероятно, потому что действие 'namespace / OperationName' является неправильным, или потому что сообщение содержит недопустимый или просроченный токен контекста безопасности или потому что существует несоответствие между привязками. Маркер контекста безопасности будет недействительным, если служба прервет канал из-за неактивности. Чтобы предотвратить прерывание незанятыми сеансами службы преждевременно, увеличьте время ожидания приема для привязки конечной точки службы.
Настройки привязки одинаковы, время на клиентском сервере и сервере веб-службы синхронизировано со службой времени Windows в одном часовом поясе.
Когда я смотрю на сервер, на котором размещен веб-сервис "B", я вижу следующие ошибки безопасности:
Источник: Безопасность
Категория: Вход / Выход из системы
Код события: 537
Пользователь NT AUTHORITY \ SYSTEM
Ошибка входа:
Причина: во время входа произошла ошибка
Тип входа: 3
Процесс входа в систему: Kerberos
Пакет аутентификации: Kerberos
Код статуса: 0xC000006D
Код подстатуса: 0xC0000133
После прочтения некоторых блогов в сети код статуса означает STATUS_LOGON_FAILURE, а код субстата - STATUS_TIME_DIFFERENCE_AT_DC. но я уже проверил часы сервера и клиента, и они синхронизированы.
Я также заметил, что токен безопасности, кажется, кэшируется где-то на клиентском сервере, потому что у них есть другой процесс, который вызывает веб-службу «B» с использованием той же учетной записи службы и успешно получает данные при первом вызове. Затем они запускают процесс обновления индексов службы поиска на сервере sharepoint, и он не работает. Тогда, если они снова вызвали первый процесс, он тоже потерпит неудачу.
Кто-нибудь сталкивался с подобными проблемами или есть идеи?
С уважением,
- Дамиан