Ошибка при попытке воссоздать клиент службы WCF - PullRequest
0 голосов
/ 29 мая 2020

Немного предыстории. У меня есть служба 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 не воссоздаю экземпляр, я не могу представить, как это будет с конфигурацией.

Благодарю за помощь!

...