У меня есть два приложения: X и Y.
X является основным приложением и обрабатывает много XML файлов. У этого есть история более чем 10 лет, и полдюжины методов были использованы, чтобы хранить, обрабатывать и обрабатывать эти XML файлы.
Y - инструмент отладки, который я разрабатываю, который может обрабатывать и отображать XML файлы в более понятной для человека форме. В принципе, у него просто есть набор таблиц стилей, которые будут определять формат XML, и если он распознает формат, он преобразует XML в HTML, который отображается в компоненте TWebBrowser.
Проблема:
Когда Y активен, я хочу, чтобы X отправил любой XML, который он обрабатывает Y для отображения целей. Но только когда Y работает! Если Y не работает, X просто ничего не сделает.
Определение Y должно быть выполнено в любой момент и должно быть быстрым. Я рассмотрел использование связи TCP/IP, но задержка, вызванная отсутствующим Y, слишком длинная. Тем более, что много XML обрабатывается иногда. Такая же проблема с именованными каналами и аналогичными сетевыми решениями. Мне нужно быстро определить, работает ли Y и доступен ли он, и если да, отправьте XML быстро, а затем продолжите X.
Я также рассмотрел возможность сделать Y-приложение на основе COM или, возможно, добавить DLL на основе COM с помощью события, которые позволят межпроцессное общение. Решение DLL было бы интересно, так как он предоставил метод X для загрузки XML файла, а затем отправил событие Y для обработки XML. Кажется, это лучший вариант, хотя мне также нужно будет проверить, зарегистрирована ли DLL или нет. Если нет, то X даже не может его назвать!
Приложение X также будет использоваться клиентами, которые не получат Y или дополнительную DLL, поэтому в большинстве случаев DLL не будет зарегистрирована. (Как я уже сказал, это помогло во время отладки...)
Но, может быть, есть другие варианты? TCP/IP слишком медленный, COM слишком сложный.
X и Y будут работать в одной и той же системе. Или просто X будет в системе и Y полностью отсутствует.
Об использовании файлов с отображением памяти... Практически я должен помнить, что большую часть времени Y не будет работать, поэтому MMF будет тратить память. Данные XML могут иметь размер до 4 МБ в пределах X, поэтому наличие нескольких блоков такого размера в памяти немного перебор. Он может использоваться для отправки сообщений о статусе между X и Y, но иногда память представляет собой проблему с приложением X. И хотя MMF можно подключить к физическому файлу, я пытаюсь вообще не писать какие-либо временные файлы. < br/" > Это хорошее решение, но я боюсь, что недостаточно.
Некоторые дополнительные объяснения в порядке, я думаю. Приложение X - это приложение, которое будет использоваться в течение нескольких часов, при этом пользователи выполняют множество действий, которые переходят на большое количество данных XML, которые обрабатываются. Приложение X представляет собой настольное приложение, которое взаимодействует с несколькими веб-приложениями (REST), веб-службами (SOAP) и другими приложениями, и большая часть этого происходит через XML. Приложение Y предназначено только для того, чтобы заглянуть внутрь процессов, выполняемых X, В основном, X работает в течение 20 минут, и появляется Y. С этого момента X должен начать отправку XML в Y до тех пор, пока Y не исчезнет снова или пока не прекратится X. В большинстве случаев Y будет просто запускать только небольшую часть выполняемых задач и, возможно, даже запускаться несколько раз. Но я мог бы подумать обо всем в неправильном направлении. Возможно, X должен быть сервером с регистрацией Y к нему... Это не настоящая проблема, когда Y не может найти X. Но X, не находя Y, не может привести к задержкам или другим проблемам...