【发布时间】:2011-10-26 04:17:42
【问题描述】:
我会直接切入。我正在尝试通过发送给我们银行的文件自动执行信用卡付款。银行卡付款未实时验证。银行通宵处理付款,并在第二天发送响应文件,其中包含成功和不成功的付款。
我有一个网络应用程序,当它接受或取消付款时,会(通过 Bus.Send)将包含付款/取消详细信息的消息发送到命令消息处理器。
然后处理器发布(通过 Bus.Publish)这个供所有服务查看。
一个服务需要做以下事情:
- 收到第一条消息后开始一个传奇
- 发出暂停营业的超时请求
- 跟踪所有进入的后续消息(在 saga 中)
- 收到超时后,将付款和取消消息转入银行文件。
问题是我不知道如何在 saga 中存储消息集合(或其他任何内容),因为 List 不允许作为虚拟成员。
这是当前的 saga 结构:
public class PaymentRequestCancelledSagaBase : IContainSagaData
{
// the following properties are mandatory
public virtual Guid Id { get; set; }
public virtual string Originator { get; set; }
public virtual string OriginalMessageId { get; set; }
// List of all the received PaymentRequestedMessages
public virtual List<PaymentRequested> PaymentRequestedMessages;
// List of all the received PaymentCancelledMessages
public virtual List<PaymentCancelled> PaymentCancelledMessages;
}
有什么想法吗?
【问题讨论】:
-
IList
受支持,请参阅制造示例。我会将付款 ID 列表保留在该列表中 -
所以银行文件处理器会使用这些支付 ID 来查找交易金额,而不是在消息中传输这些金额?在这种情况下,如果消息中没有数据,我需要向处理器添加数据访问层以获取数据。
-
您也可以存储该信息,就像在制造示例中使用 OrderLine (DTO)。
标签: c# nhibernate nservicebus saga