Я использую тип ChannelFactory<T>
для создания каналов в веб-службе WsHttpBinding
WCF, а служба использует комбинацию имени пользователя и пароля для аутентификации. Пока у меня работает аутентификация с использованием моего пользовательского валидатора, у меня возникают трудности при создании каналов с разными учетными данными.
Учитывая накладные расходы на создание ChannelFactory<T>
, я пытаюсь кэшировать один его экземпляр и делиться им для создания нескольких каналов в течение всего времени жизни моего приложения. К сожалению, похоже, что учетные данные напрямую связаны с фабрикой и не могут быть изменены после создания канала.
Другими словами, если я попробую это:
factory.Credentials.UserName.UserName = "Bob";
factory.Credentials.UserName.Password = "password";
var channel1 = factory.CreateChannel();
factory.Credentials.UserName.UserName = "Alice"; // exception here
factory.Credentials.UserName.Password = "password";
var channel1 = factory.CreateChannel();
Я получаю исключение, сообщающее, что свойство UserName
теперь доступно только для чтения.
Возможно ли реализовать здесь какое-либо кэширование или мне по сути придется кэшировать экземпляр ChannelFactory
для каждого имени пользователя?