Немного предыстории. У меня есть служба WCF, которая использует токены jwt в качестве «пароля». Все работает нормально, пока токен не истечет, хорошо, без проблем. Я пытаюсь заново создать клиент службы после получения нового токена (поскольку поле ClientCredentials.Username.Password
становится доступным только для чтения после открытия клиента). После долгой отладки я понял, что код настолько прост, что не имеет смысла, почему он не работает. В основном я создаю клиента и открываю соединение (отлично работает, как всегда). Затем я пытаюсь закрыть и воссоздать службу, чтобы обновить пароль (токен). Странно то, что я получаю странные ошибки, несмотря на то, что один и тот же код заранее работал буквально за миллисекунды. Я получаю следующие ошибки:
The request for security token could not be satisfied because authentication failed.
И при просмотре трассировки WCF я также получаю
The client and server cannot communicate, because they do not possess a common algorithm
Что не имеет смысла, потому что это должен быть точно такой же «алгоритм», который используется в точно такой же код только строчками ранее. Я надеюсь, что какой-нибудь ангел WCF сможет спасти положение с чем-то, чего мне явно не хватает
Фрагмент кода примера
var rService = new RServiceReference.RIServiceClient();
//Set the client credentials for the service
rService.ClientCredentials.UserName.UserName = username;
rService.ClientCredentials.UserName.Password = password;
try
{
rService.Open(); //This works no problem
rService.Close();
//Start a fresh service client, since we need to do this in order to set the password again
rService = new RServiceReference.RIServiceClient();
//And update the credentials
rService.ClientCredentials.UserName.UserName = username;
rService.ClientCredentials.UserName.Password = password;
//Finally attempt to reconnect
rService.Open(); //THIS is where it bombs for some reason giving the errors above.
}
catch (Exception ex) { }
Я могу включить информацию app.config, если потребуется, но учитывая все работает, как ожидалось, пока я go не воссоздаю экземпляр, я не могу представить, как это будет с конфигурацией.
Благодарю за помощь!