【问题标题】:In ServiceMatrix, is it possible to 'ConvertToSaga' an endpoint which publishes/subscribes event messages rather than command messages?在 ServiceMatrix 中,是否可以“ConvertToSaga”发布/订阅事件消息而不是命令消息的端点?
【发布时间】:2015-03-03 16:23:24
【问题描述】:

我有一个包含 4 个 NSB 主机端点的解决方案,这些端点是使用 ServiceMatrix 创建的,我想在 saga 中使用它们。

我知道如何从命令转换为 Saga,并且在测试项目中运行良好。我不明白如何对已发布的事件做同样的事情,因为菜单选项不可用。是否可以使用 ServiceMatrix 做到这一点?

我尝试通过关注this tutorial 并观察转换为 Saga 时对我的测试项目所做的更改来手动实施更改。

构建正常,但运行时在框架内抛出错误:

System.InvalidOperationException 未处理 消息:在 mscorlib.dll 中发生了“System.InvalidOperationException”类型的未处理异常

附加信息:没有可用的 IBus 实例,请配置一个并验证您没有在您的 saga 中定义自己的 Bus 属性,因为它隐藏了基类中的一个

我正在使用 VS2013 和 ServiceBus 5。

更新: 我从生成的代码中注释掉了继承的 IHandleMessages 接口和公共 IBus Bus 属性,它运行时没有出现此错误。我不乐意这样做,因为使用该工具的下一个设计更改将覆盖这些修复。

【问题讨论】:

    标签: nservicebus nservicebus-sagas


    【解决方案1】:

    在您的命令处理程序中,您通常有一个 IBus 类型的属性,该属性通过属性注入或构造函数注入注入到处理程序类中。

    当您从命令处理程序转移到 Saga 时,您需要从处理程序中删除您的 IBus 属性。 Saga 基类有一个您应该使用的 Bus 属性。这个属性是自动为你填充的,你不应该关心这个。这正是这个异常告诉你的。

    【讨论】:

    • 感谢 Alexey - 这确实修复了错误。您知道是否可以在 ServiceMatrix 工具中执行此操作,或者更改生成的代码以便我不需要删除(注释掉)该属性?
    • 我不使用ServiceMatrix,但我相信删除生成的代码没有任何问题。如果您认为这是 ServiceMatrix 中的错误,您可能需要在 Github 上提交问题。
    • 接受,因为这确实解决了问题。我认为目前服务矩阵的一个限制是事件消息无法做到这一点。
    猜你喜欢
    • 2012-06-24
    • 2012-02-19
    • 2015-04-13
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    相关资源
    最近更新 更多