Обработка пустых файлов в BizTalk 2010

У меня есть место приема в моем проекте BizTalk 2010, и иногда это место приема получает пустой файл. Конвейер приема - PassThruReceive. Затем у нас есть порт отправки, который имеет фильтр для этого имени порта приема. Итак, все, что мы делаем, это перемещаем файл из места приема в место отправки.

Проблема, с которой я сталкиваюсь, заключается в том, что в случае, если мы получим пустой файл в месте приема, мой клиент хочет, чтобы файл по-прежнему перемещался в порт отправки. Я знаю, что из коробки адаптер FILE отбрасывает пустые файлы и записывает событие в журнал событий, в котором говорится, что он был удален.

Я следил за статьями, в которых показан настраиваемый адаптер FILE, выполняющий эту задачу. Я добился определенных успехов с этим нестандартным адаптером. Файл подхвачен. Получено BizTalk, и порт отправки успешно отправляет файл. Однако даже с этим решением я сталкиваюсь с проблемой на стороне приема, когда файл заблокирован и не может быть удален. Я слежу за различными статьями на эту тему, и каждый раз у меня возникает одна и та же проблема, когда файл заблокирован и не может быть удален.

У меня такой вопрос. Несмотря на то, что вызывается batchMessage.Message.BodyPart.Data.Close();, поток все еще заблокирован. Есть ли у меня способ узнать, где еще BizTalk может заблокировать файл? Есть ли другой способ справиться с этим?

Одна из статей, за которыми я следил, находится здесь: http://biztalkwithshashikant.blogspot.com/2011/04/processing-empty-files-in-biztalk.html


person TimWagaman    schedule 09.12.2013    source источник
comment
У вас установлено значение WIP? И работает ли это, если в файле есть данные?   -  person Johns-305    schedule 10.12.2013
comment
У меня есть установленное значение, и нет такой же проблемы, если есть данные или нет данных.   -  person TimWagaman    schedule 10.12.2013
comment
Я бы поставил точку останова на File.Delete, затем использовал Process Explorer, чтобы увидеть, у кого заблокирован файл, затем раскопайте и посмотрите, является ли базовый Stream по-прежнему FileStream. Хотя, если бы это было не так, я не уверен, что бы я делал дальше :).   -  person Johns-305    schedule 11.12.2013


Ответы (3)


Мне кажется, что у вас возникают проблемы при запуске многосерверного адаптера FILE. Готов поспорить, у вас более 1 сервера в группе BizTalk?

Я сам этого не делал, но слышал, что заставить адаптер работать без сбоев на нескольких серверах - одна из самых сложных задач в BizTalk. Уловка состоит в том, чтобы найти способ разделить нагрузку между несколькими экземплярами одного и того же хоста BizTalk.

У вас по-прежнему возникает та же проблема при запуске экземпляра только на 1 сервере вместо 2?

person Pieter Vandenheede    schedule 10.12.2013
comment
Я запускаю его на своей локальной машине разработки, так что на данный момент это среда с одним сервером. - person TimWagaman; 10.12.2013

в методе кода настраиваемого компонента конвейера:

IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)

Вы должны вернуть pInMsg, не равное нулю, и поток .BodyPart, расположенный в конце. Если pInMsg имеет значение NULL, BizTalk автоматически отбрасывает сообщение. Вам не нужно закрывать его, но вам нужно переместить его в конец, чтобы BizTalk знал, что вы прочитали и обработали все это.

person Jay    schedule 25.05.2016

Чтобы решить эту проблему, вместо этого используйте адаптер FTP для получения файлов, адаптер FTP не отбрасывает пустые файлы.

Вполне возможно, что для системы, создающей файлы, это все еще местоположение файла, но также доступное через FTP.

person Dijkgraaf    schedule 12.07.2017