c# - 使用 Windsor CaSTLe 和 WcfFacility 创建具有 Message Security 和用户名凭据的 WCF 代理

标签 c# wcf castle-windsor ioc-container wcffacility

好的,我们使用消息安全用户名凭证(以及 X509 证书加密)与我们的 WCF 服务进行通信。我对这种方法不满意,但这不是问题的重点,我不想谈这个。

我正在使用 Windsor CaSTLeASP NET Web Forms + MVC hybrid 中生成代理。我们正在使用表单例份验证并使用用户的凭据与 WCF 服务进行通信 - 这将有助于审核所有调用。正如我所说,我对这种方法不满意,但这不是重点。

我创建了 CustomCredentials 类,它继承了 AbstractCredentials 类,WcfFacility 很乐意使用它来配置我的代理。正如您将在下面看到的,我的所有设置都只是几行。我在下面创建了单元测试,它演示了我正在做的所有事情:创建代理、进行调用然后在循环中释放它。现在我期待这个测试能够工作,但它没有,我得到了

预期:10 但实际为:1

我没有包括绑定(bind),但这无关紧要,因为我说过我正在使用带有 X509 证书的 Message Security。

我知道对于具有消息安全性的 channel 工厂,一旦打开就无法更改凭据。这是同一个问题吗?

这是 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
} 

最佳答案

我在城堡论坛上发帖,没有回复。这是 WCF 设施中设计的一个问题,他们在其中缓存服务 channel ,这在没有安全性的情况下是可以的,但在安全性下不起作用。

关于c# - 使用 Windsor CaSTLe 和 WcfFacility 创建具有 Message Security 和用户名凭据的 WCF 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5002309/

相关文章:

c# - 如何在Azure服务总线选项中的MessageHandlerOptions中设置自动完成(使用Net Core 3.1)

c# - 检查 View 是否存在

c# - 当连接过多时,传出客户端 TCP 端口会被阻塞

c# - Windsor 为多个接口(interface)注册单例组件

c# - 如何使用 FtpWebRequest 递归删除包含文件的文件夹?

c# - WCF,如何实例化 DataContract 中的所有对象? [OnDeserializing] 不起作用

wcf - 什么是最简单的 WCF/SOAP 配置?

c# - 将 ASP.NET MVC Controller 属性注入(inject)服务层依赖项?

c# - 为什么 CaSTLeWindsor 的 BeginScope 超出范围?

c# - 将 C++ 结构传递给 C# 应用程序