ОК, мы используем безопасность сообщений с учетными данными имени пользователя (и шифрование сертификата X509) для связи с нашей службой WCF.Я не доволен этим подходом, но это не вопрос, и я не хочу вдаваться в подробности.
Я использую Виндзорский замок для генерации прокси в ASPNET Web Forms + MVC гибрид .Мы используем проверку подлинности с помощью форм и используем учетные данные пользователя для связи со службами WCF - это поможет контролировать все вызовы.Как я уже сказал, я не доволен этим подходом, но это не главное.
Я создал класс CustomCredentials
, который наследует класс AbstractCredentials
, и WcfFacility с радостью использует его для настройки моих прокси.Как вы увидите ниже, все мои настройки - всего несколько строк.Ниже я создал модульный тест, который демонстрирует все, что я делаю: создаю прокси, звоню и затем освобождаю его в цикле.Теперь я ожидаю, что этот тест будет работать, но он не работает, и я получаю
Expected: 10 But was: 1
Я не включил привязку, но это не имеет значения, так как я сказал, что использую Message Security с X509сертификаты.
Я знаю, что для фабрики каналов с безопасностью сообщений после открытия вы не можете изменить учетные данные.Это та же проблема?
Это ошибка в WcfFacility или ограничение?
Вот код
[TestFixture]
public class Harness
{
private IWindsorContainer _container;
public static int NumberOfTimesCredentialsConfigured = 0;
[SetUp]
public void Setup()
{
_container = new WindsorContainer().AddFacility<WcfFacility>();
Component
.For<IFrameworkUsers>()
.ActAs(DefaultClientModel
.On(WcfEndpoint.FromConfiguration("FrameworkUsersService"))
.Credentials(new CustomCredentials()))
.LifeStyle.Transient);
}
[Test]
public void MultipleProxyTest()
{
const int Runs = 10;
NumberOfTimesCredentialsConfigured = 0;
for (int i = 0; i < Runs; i++)
{
IFrameworkUsers frameworkUsers = _container.Resolve<IFrameworkUsers>();
frameworkUsers.CreateUserSession();
_container.Release(frameworkUsers);
}
Assert.AreEqual(Runs, NumberOfTimesCredentialsConfigured);
// FAILS!!! Expected: 10 But was: 1
}
[TearDown]
public void TearDown()
{
}
}
public class CustomCredentials : AbstractCredentials
{
#region Overrides of AbstractCredentials
protected override void ConfigureCredentials(ClientCredentials credentials)
{
credentials.UserName.UserName = "testuser";
credentials.UserName.Password = "abcdef";
Harness.NumberOfTimesCredentialsConfigured++;
}
#endregion
}