小编jac*_*ida的帖子

在Amazon EC2托管的应用程序中使用NServiceBus

我们正在启动一个新项目,它具有一些非常基本的消息传递和排队要求,但是在将来可能会有一些额外的要求,例如sagas可以处理可能无序到达并需要重新排序的消息.

我们刚刚发布了一个完全托管在Amazon EC2上的项目,该项目中还有一个简单的消息传递系统.我们有一个非常简单的小型pub/sub机制,我们收到一条消息,然后根据其类型确定用于消息的处理程序.在我们的新项目中,我们也有类似的机制,并且可能有一些稍微复杂的要求,但即使我们可以取消使用我们自己的代码来解决消息处理程序,这也很酷.

我们真的很想使用NServiceBus,因为pub/sub模型非常好,但到目前为止我们一直在使用Amazon SQS作为队列提供者.我们的每台EC2机器都有一个工作人员正在侦听相同的SQS队列并从中拉出消息来处理它们.显然,在NServiceBus中,不支持SQS作为传输层(我知道这是因为NServiceBus是围绕可靠且低延迟的队列构建的).

我知道NServiceBus有一个分销商,我可以想象在它自己的EC2实例上托管它,但问题是那里有一个巨大的单点故障,所以如果这个故障发生,我们基本上就搞砸了.根据我的收集,人们设置Windows故障转移群集来处理内部网络的这个问题,但我不知道这是否适用于EC2.

是我在实际上尝试在基于云的环境中使用NServiceBus的人可以找到的唯一博客文章之一,他似乎并不推荐它.我只是想知道这里有没有其他人尝试过,如果有的话,他们会提供什么建议吗?似乎很遗憾,我们无法仅仅因为我们托管在云上而使用这样一个伟大的框架.

看起来Azure Queues正在取得一些进展,这是我们可能会看到的,但是现在我们希望将基础设施保留在亚马逊,因为我们有很多可以重复使用的构建自动化,这是基于.

nservicebus amazon-ec2

13
推荐指数
1
解决办法
944
查看次数

声明未在ADFS 2.0中传递给依赖方

好的,所以我对索赔感知应用程序的整个世界都很陌生.我能够使用Azure ACS快速启动和运行,但在尝试使用ADFS 2.0作为身份提供程序时,它有点不同(我想将其实际用作联合提供程序,但暂时我我只是试图使用它作为身份提供者来运行样本.

我一直在查看这里的指南,并试图遵循AD FS 2.0联盟,其中列出了WIF应用程序循序渐进指南.它将指导您完成设置ADFS 2.0以及一些声明感知的示例应用程序,您只需查看正在发送的声明即可.

所以我可以启动并运行,通过指南中定义的声明(只是Windows帐户名称).问题是当我尝试添加更多.我可以使用Pass Through或Filter Incoming Claim规则模板转到ADFS GUI中的依赖方应用程序并添加Issuance Transform Rule .但是,当我运行我的应用程序时,除非添加的声明类型是Name,否则它不会将声明传递给我的应用程序.

我想要传递的其中一个是登录到应用程序的用户的电子邮件地址.所以我添加了一个规则来传递电子邮件地址,然后更新示例应用程序的web.config以取消注释claimTypeRequired部分下的这一行:

<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" optional="false" />
Run Code Online (Sandbox Code Playgroud)

请注意,我将其设置为非可选.我还更新了要添加的应用程序的联合元数据,如下所示:

<auth:ClaimType Uri="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress" Optional="false" xmlns:auth="http://docs.oasis-open.org/wsfed/authorization/200706" />
Run Code Online (Sandbox Code Playgroud)

然后我进入ADFS GUI,转到依赖方信任,我的示例应用程序中选择了联邦元数据更新.因此,它现在将电子邮件列为已接受的声明之一.

然后,我进入了声明提供程序信任,并将电子邮件声明规则添加到Active Directory提供程序信任的接受转换规则中(列出的唯一一个).

但是,当我运行应用程序时,它没有通过电子邮件声明(或我尝试的任何其他声明).谁能告诉我我在这里失踪了什么?

我还应该注意,我运行了一项测试,将我的应用程序更改为接受电子邮件声明规则,不仅没有通过电子邮件,而且它仍然通过Windows帐户名称名称声明,尽管事实是我甚至没有将它们列为我申请的可接受的索赔.

如果有人能指出我在这里发生严重错误的地方,那将非常感激.

根据之前的博客文章启用日志记录后,以下是日志中的相关条目: TraceRecord 事件ID 1000,"输入详细信息中包含的主叫索赔": 输入索赔日志条目

所以你可以看到,我要求的信息显然已经丢失了.我将日志记录输出设置为详细,但实际上没有其他任何兴趣.您将看到NETWORK SERVICE用户的跟踪记录(具有相同的声明集),但没有什么引人注目的.所有日志条目都是信息性的,没有任何错误.

wif adfs2.0

6
推荐指数
1
解决办法
2万
查看次数

NServiceBus依赖注入

我一直遇到这个问题.

AndreasÖhlund在这里回答了一个问题,但我一直无法使用他给出的建议来解决问题.

这是我的设置:

public abstract class CommandHandler<T> : IHandleMessages<T>, IDomainReadRepository where T : Command
{
    public IDomainRepository DomainRepository { get; set; }

    protected abstract void OnProcess(T command);

    public TAggregate GetById<TAggregate>(Guid id) where TAggregate : IEventProvider, new()
    {
        return DomainRepository.GetById<TAggregate>(id);
    }

    public void Handle(T message)
    {
        OnProcess(message);
        // Domain repository will save.
    }
}
Run Code Online (Sandbox Code Playgroud)

这个想法是特定的命令处理程序覆盖OnProcess方法并做他们的事情,然后DomainRepository将保存所有内容.

以下是我注册组件的方法:

public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
{
    public void Init()
    {
        Configure.With().DefiningCommandsAs(c => c.Namespace != null && c.Namespace.EndsWith("Commands"));
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<DomainRepository>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<EventStore.Sql.EventStore>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<MongoDbObjectSecurityDescriptorRepository>(DependencyLifecycle.InstancePerCall);
        Configure.Instance.DefaultBuilder().Configurer.ConfigureComponent<LocalTenantConfig>(DependencyLifecycle.InstancePerCall); …
Run Code Online (Sandbox Code Playgroud)

dependency-injection nservicebus nservicebus3

3
推荐指数
1
解决办法
3034
查看次数