Новый материал на Хабре разбирает файловый обмен как нормальный шаг маршрута в .NET, а не как набор обходных решений. В заголовке прямо перечислены привычные костыли, от которых автор предлагает уйти: cron, FileSystemWatcher и самописные циклы опроса.
Лид объясняет, почему тема жива. Банк кладёт выписку в каталог на шаре. 1С выгружает заказы в XML по расписанию. Партнёр по EDI шлёт файлы .edi на FTP. Биллинг ночью роняет CDR-файлы. Розничная сеть присылает остатки в CSV, потому что так было в 2009-м и менять это никто не собирается. Автор резюмирует: спросите интегратора, через что реально ходят деньги, и он назовёт файлы.
Важная мысль, которую легко пропустить. Файловый обмен выглядит проще, чем есть. Простота обманчива: нужно понять, дописан ли файл, не обработан ли он дважды, как сделать запись атомарной. В тексте как раз названы рабочие приёмы — ожидание дописи, идемпотентность и схема temp плюс rename.
Зачем это читать разработчику, который уже «просто поставил вотчер на папку». Потому что вотчер и cron решают только факт появления файла, но не контракт. Контракт — это когда один и тот же файл нельзя провести два раза, а недописанный кусок не уезжает в учёт. Именно здесь интеграции обычно и ломаются, хотя снаружи всё выглядит как «положили в папку».
Автор настаивает, что это не легаси на выброс, а работающий транспорт. С этим трудно спорить, если вы видели хотя бы одну связку магазина и учётной системы. Единственное, чего нет в лиде, — готового куска кода и бенчмарков. Поэтому обзор не обещает, что после чтения исчезнут все очереди. Он фиксирует сдвиг рамки: папка может быть шагом оркестрации, а не свалкой скриптов.
Если вы проектируете обмен с банком, 1С или EDI, имеет смысл открыть полный текст и сверить свою схему с предложенной. Источник — статья на Хабре, не документация Microsoft и не стандарт EDI.
Ещё один практический критерий, который стоит унести из текста: файл должен быть либо ещё не виден потребителю, либо уже целиком готов. Отсюда и схема с временным именем. Пока байты пишутся в temp, маршрут их не берёт. После rename появляется законченный объект. Это скучно звучит, но именно так интеграция перестаёт зависеть от удачи и от того, успел ли вотчер моргнуть наполовину.