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