OK 、ユーザー名の資格情報(およびX509証明書の暗号化)を使用したメッセージセキュリティを使用して、WCFサービスと通信しています。私はこのアプローチに満足していませんが、それは問題のポイントではなく、私はそれには入りたくありません。
Windsor Castleを使用して、 ASP NET Web Forms+MVCハイブリッドでプロキシを生成しています。フォーム認証を使用しており、ユーザーの資格情報を使用してWCFサービスと通信しています。これはすべての呼び出しの監査に役立ちます。私が言ったように、私はこのアプローチに満足していませんが、それはポイントではありません。
CustomCredentials
クラスを継承するクラスを作成しましたがAbstractCredentials
、WcfFacilityはそれを使用してプロキシを構成します。以下に示すように、私のセットアップはすべてほんの数行です。以下にユニットテストを作成しました。これは、プロキシを作成し、呼び出しを行ってから、ループで解放するという、私が行っているすべてのことを示しています。今、私はこのテストが機能することを期待していますが、機能せず、
Expected: 10 But was: 1
バインディングは含まれていませんが、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
}