타임 아웃 메시지가 수신 될 때까지 특정 유형의 수신 메시지를 추적하기 위해 사가를 사용하는 에이전트가 있습니다. 타임 아웃 처리기에서 나는 다음과 같습니다Bus.Publish() 또는 subscription에 의해 StackOverflowException이 발생 했습니까?
[Serializable]
public class TransactionDetail
{
// Guid needed for NHibernate to store it in database. All
// member variables are virtual for the same reason.
public virtual Guid Id { get; set; }
public virtual Int32 ScheduleBatchID { get; set; }
public virtual Int32 PseudoSagaID { get; set; }
public virtual String CreditCardNumber { get; set; }
public virtual String ExpiryDate { get; set; }
public virtual String AccountNumber { get; set; }
public virtual String BSB { get; set; }
public virtual Decimal Amount { get; set; }
public virtual Int32 Firm_fk { get; set; }
public virtual String FirmName { get; set; }
public virtual TransactionType PaymentType { get; set; }
// transaction number, max 15 chars, to use one of the following:
public virtual int ApplicationPaymentInfo_fk { get; set; }
public virtual BankRequestResponseSagaBase Parent { get; set; }
}
내가 자리에있는 구독이없는 경우 버스 :
public override void Timeout(object state)
{
// If Data.IsNull: Do nothing!!! Report to log only.
Logger.Debug("=========================================================================");
Logger.Debug(string.Format("Timeout message received. State: {0}.", state.ToString()));
QuickBatch qbBuilder = new QuickBatch();
// Create new message and publish it
BankRequestBatchClosed eventMessage = Bus.CreateInstance<BankRequestBatchClosed>();
eventMessage.UniqueBatchIdentifier = qbBuilder.GenerateUniqueBatchIdentifier(QuickBatch.QB_BATCHTYPE_CC);
eventMessage.ScheduleBatchID = this.Data.ScheduleBatchID;
eventMessage.EventDate = DateTime.Now;
eventMessage.EventID = Guid.NewGuid();
eventMessage.TransactionItems = this.Data.PaymentRequestedTransactionItems;
Logger.Debug("=========================================================================");
Logger.Debug(string.Format("Timeout method about to send BankRequestBatchClosed message. UniqueBatchIdentifier: {0}",eventMessage.UniqueBatchIdentifier));
Bus.Publish(eventMessage);
Complete();
}
TransactionItems하는 ICollection은 여기
는 TransactionDetail 클래스입니다 .Publish() 호출은 정상적으로 처리됩니다.
가 'System.StackOverflowException'형식의 처리되지 않은 예외가이 이외의 오버 플로우에 대한 더 이상의 정보가 없습니다 mscorlib.dll에서에서 발생
: 나는 다른 서비스가에 가입 한 경우에, 나는 다음과 같은 오류 메시지가 : {현재 스레드가 스택 오버 플로우 상태에 있기 때문에 표현식을 계산할 수 없습니다.}
내 자신의 SagaPersister, 프로필 및 SagaRegistry를 가지고 있지만이 문제와 관련이 있는지는 확실하지 않지만 필요한 경우 제공 할 수 있습니다.
참고 문헌을 삭제하고 몇 줄의 다른 줄을 정리하면 충돌이 멈췄습니다. Udi에게 감사 드리며, 시드니에서 당신을 만나려고합니다. – Fellmeister