Хорошо, мы используем безопасность сообщений с учетными данными имени пользователя (и шифрование сертификата X509) для связи с нашей службой WCF. Меня не устраивает такой подход, но вопрос не в этом, и я не хочу вдаваться в это.
Я использую Виндзорский замок для создания прокси в гибриде ASP NET 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
}