Подаване на изключения за обработка на големи съобщения в BizTalk

Първият ми въпрос за препълване на стека, така че, моля, простете за всяка глупост/наивност от моя страна тук.

Имам решение BizTalk 2010 R2, което използва Claim Check интеграционен модел, внедрен с персонализирани компоненти на тръбопровод за преместване на големи (понастоящем до 1 Gb) .mp4 файлове до местоположение на папка при получаване и повторно вземане при изпращане, така че да не преминават през BizTalkMsgBoxDb.

Понякога получаваме грешка при получаването на файловете, което води до възникване на изключения в порта за получаване. Използваме настройката „Активиране на маршрутизиране за неуспешни съобщения“, за да избегнем спирането на екземпляра в системата, но това води до изтегляне на големия .mp4 файл в полето за съобщения и в крайна сметка до EsbExceptionDb. Очевидно не е идеалното решение.

Бих могъл да внедря код в персонализирания компонент на тръбопровода за получаване, за да се справя със специфични видове грешки, но се чудя дали има по-добър начин за справяне с това, така че всяко изключение - очаквано или неочаквано - да доведе до голям файл се насочва към неуспешно файлово хранилище на друго място, без да се влиза в BizTalkMsgBoxDb по всяко време.

Всеки съвет се получава с благодарност.


person GRoberts    schedule 02.10.2015    source източник
comment
Персонализираният тръбопроводен компонент изпраща ли файла на диска и заменя ли pInMsg.BodyPart.Data с поток, съдържащ малко XML съобщение за по-нататъшна обработка? Нещо като това?   -  person Gruff    schedule 02.10.2015
comment
Да, прави почти точно това. Проблемът, който се опитвам да разреша, е, че когато има грешка в тази обработка (например наскоро имахме мрежов проблем, който направи целевата папка за запис на поток недостъпна за известно време), тогава оригиналният файл се запазва в полето за съобщения като част от стандартната обработка на грешки.   -  person GRoberts    schedule 05.10.2015


Отговори (2)


Бих предложил обработка на изключения в персонализирания канал за получаване.

Уверете се, че pInMsg.BodyPart.Data се заменя с различен (по-малък) поток, тогава големият файл не може да се предава в BizTalkMsgBoxDb, защото BizTalk вече няма препратка към него.

person Gruff    schedule 05.10.2015
comment
Благодаря. Ще го променя така, че msg.BodyPart.Data да бъде заменен веднага при обработката и персонализираното обработване на изключения в компонента на конвейера да се опита да прехвърли файла към местоположението на грешка. Надявах се на по-спретнато готово решение, но предполагам, че това е оптимистично, като се има предвид, че вече сме извън нормалната обработка с персонализиран компонент. - person GRoberts; 07.10.2015

Очевидно трябва да използвате обработка на изключения и да се уверите, че pInMsg.BodyPart.Data не е празен. Също така, ако използвате персонализиран канал, както е предложено в тази статия „http://www.codeproject.com/Articles/180216/Transfer-Large-Files-using-BizTalk-Receive-Side"

Моля, уверете се, че оптимизирате кода в метода за изпълнение. За моя случай замених цикъла while(bytesRead!=0) с кода по-долу. Сега не виждам никакви проблеми в моя персонализиран тръбопровод и работи бързо. използвайки

(var fileStream = File.Create("C:\\Path\\To\\FileName")){originalStream.Seek(0, SeekOrigin.Begin);originalStream.CopyTo(fileStream);}

person Nilesh Sawant    schedule 08.01.2016