2016-03-24 11 views
0

BizTalk 2010 orkestrasyonunun istisna işlemlerini test ediyorum. Orkestrasyonun kendisine eklenmiş bir yakalama şekli ile tek bir kapsam şekli vardır. Kapsam şeklinin işlem türü 'NONE' olarak ayarlanmış olduğundan, .NET istisnası ile çalışabilirim. Avun içinde bir mesaj atama şekli ile bir yapı mesaj şeklidir. Mesaj atama şekli, aktif mesaj tipini alma şeklinden kullanıyor. Oryantasyon çalıştırıldığında, ileti gönderim şekli üzerinde askıya alınır. hatadır: Montaj System.XML, Version = 4.0.0.0, Culture = içindeSistem.exception neden ileti biçimi şeklinde seri hale getirilemiyor?

Tip System.Xml.XmlDocument nötr, PublicKeyToken = xxx seri hale getirilebilir olarak işaretlenmemiş.

Projem kurulur

test amaçlı ben gelen BizTalk mesajı veya bir XML dosyası işleyebilir şekilde (test editörü aracılığıyla.) aldığım şekline gönderilen XML alabilir, kaydedebilir XML dosyası olarak ve XML dosyasını işleyin.

İstisna işlemeyi test etmek için bilerek, başarısız olacak bir veritabanı eki kodluyorum. Tam veritabanı hatası bir günlük dosyasına yazılır ve yeni bir istisna şu şekilde bir mesajla yazılır: BLAH isteğinin tamamlanmasına işlenemedi - İleti İşlemcisi - Resim Kimliği: ABC Not Kimliği: XYZ. XML dosyasını çalıştırırken, uygulama, hatasını beklenen yere atar ve hata, test düzenleyicisine geri yüklenir. Hata mesajı test editörü işlevinde serileştirebiliyorum.

Ancak, BizTalk'tan çalışırken hata alıyorum. Bu özellikler ile bir korelasyon kümesi tanımlanmıştır: BTS.ReceivePortName, ErrorReport.ErrorType, ErrorReport.InboundTransportLocation.
Atama şeklindeki kod aşağıdaki gibidir.

msgFail = InputMsg; 
msgFail(ErrorReport.ErrorType) = "FailedMessage"; 
msgFail(ErrorReport.Description) = ex.Message; 
msgFail(ErrorReport.FailureCategory) = 0; 
msgFail(ErrorReport.FailureCode) = ""; 
msgFail(ErrorReport.InboundTransportLocation) = InputMsg(BTS.InboundTransportLocation); 
msgFail(ErrorReport.RoutingFailureReportID) = System.Convert.ToString(System.Guid.NewGuid()); 

msgFail gönderilmeye çalıştığım iletidir.

InputMsg, ilk alma şeklindeki etkin ileti türüdür. Doğrulayan bir şemaya bağlı çok parçalı bir mesaj türüdür. Yakalama biçiminde exception object adıdır.

ex. Bu System.Exception türüdür.

Kapsam için özelliklerin nasıl ayarlanacağı ve istisna nesnesini kullanabilecek şekiller yakalama hakkında birçok gönderi okudum, ancak hala çalışmıyor.
XML dosyasından çalışırken hata iletisini serileştirebildiğimden, benim sorunumun, düzenleme işlemimin istisnayı nasıl aldığına ilişkin olduğunu varsayıyorum.

+0

İleti Türünün bir vanilya özel durum olduğundan emin misiniz? –

+0

@SOreadytohelp, Teşekkürler. "Vanilya" ile ne demek istediğinden emin değilim. Gelen mesajda yaptığım tek değişiklik, veritabanı metninin max altında yorum metnine sahip olmaksa, orkestrasyonlar tamamlanır ve dış sisteme mesaj gönderir, bu yüzden istisnaın ne zaman ve nasıl olduğundan eminim atılıyor. – ktri

+0

Yalnızca, Except nesnesini, yalnızca kapsam düzeyinde değil, taşıyıcının kendisinde tanımlamanız gerekir. Ancak, Serileştirme uyarısı, istisna olan XmlDocument ile ilgili bir İstisna (başlık) ile ilgili değildir. Açıklayabilir misin? –

cevap

0

Eğer ESB Toolkit kurulu ise, hata mesajlarınızı oluşturmak için bunu kullanabilirsiniz.

e.g

eSBFault = Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.CreateFaultMessage(); 
eSBFault.FailureCategory= "General System Exception"; 
eSBFault.FaultCode = "500"; 
eSBFault.FaultDescription = orchestrationName + ": " + ex.Message; 
eSBFault.FaultSeverity = Microsoft.Practices.ESB.ExceptionHandling.FaultSeverity.Error; 
eSBFault.Scope = "Scope Name"; 
Microsoft.Practices.ESB.ExceptionHandling.ExceptionMgmt.AddMessage(eSBFault, InputMsg); 

Not 1: msgFail bu örnekte eSBFault, ancak bunun yanı msgFail çağırabilirsiniz: orchestrationName önceki Orkestrasyonu

orchestrationName = Microsoft.XLANGs.Core.Service.RootService.Name; 

Not 2'de ayarlanan bir değişkendir. Bu, Microsoft.Practices.ESB.ExceptionHandling.Schemas.Faults.FaultMessage

İlgili konular