Отправка файла XML в ответ на запрос HTTPS POST

Дэн, Сун, Ли:

Спасибо всем за то, что нашли время, чтобы ответить.

Дэн:

Да, мы спросили у продавца. Мы занимаемся их PM и ждем ответа от них. Он должен посоветоваться с их техническими специалистами. Судя по тому, что вы, Сун и Ли, говорите, это обнадеживает, и я не могу дождаться вторника (руководитель финансового отдела не работает в понедельник, поэтому мы не можем получать какие-либо файлы до вторника), чтобы дать все ваши рекомендации попытка.

Еще раз спасибо всем, мы очень признательны за то, чтобы поделиться с нами своим опытом. Надеюсь, у вас всех хороших выходных, вы, безусловно, помогли мне улучшить :-)!

Джерри

По сути, это вопрос «как делать».

Фон:

Мы почти закончили разработку большого приложения, написанного на ColdFusion (v11), которое взаимодействует с системой управления поставщиками Sciquest. Последний элемент возвращает ответ поставщику, Sciquest, после получения файла XML. Этот XML-файл ответов содержит информацию, относящуюся к файлу, который они нам отправили.

Файл поставщика хранится на одном из наших веб-серверов, который контролируется наблюдателем каталогов ColdFusion. Обычно с другими приложениями этого типа мы отправляем обратно информацию по URL-адресу.

Однако наш контакт в Sciquest сказал нам (именно то, что нам сказали):

Ответное сообщение об экспорте поставщика не нужно отправлять по URL-адресу. Это ответ на то же соединение, по которому сервер SciQuest отправил XML на сервер Pace. Это было бы похоже на сообщение ACK, если бы процесс был асинхронным.

По-видимому, соединение поставщика (я предполагаю, что соединение http keep alive) не закрывается должным образом до получения ответа. Может ли кто-нибудь дать инструкции о том, как отправить файл ответов XML обратно поставщику через его соединение с нашим сервером, предпочтительно с использованием ColdFusion.

Обновление:

Во-первых, спасибо, Дэн, Сун и Ли за ответы. Это первый раз, когда я публиковал сообщения в Stack OverFlow.

Файл отправляется нам через HTTPS-сообщение поставщиком Sciquest. Прежде чем мы сможем отправить ответ обратно поставщику, нам необходимо обработать файл, потому что XML-файл ответа требует ключей новой записи (из нашей системы) вместе с номерами "SQI", которые начинают каждый раздел узла XML, отправленного нам. .

Я попробую то, что вы все предложили. Я заметил, что отправленный нам файл контролируется CF Gateway Directory Watcher, который перемещает файл на файловый сервер и запускает систему, которая его обрабатывает.

Будет ли выполнение программы, выводящей ответный XML-файл, как предложил Дэн, или программы со спецификацией CFHeader, как предлагает Сунг, быть всем, что требуется для отправки информации о файле обратно в качестве ответа поставщику в конце основной программы?

Мы не сможем отправить нам больше файлов до вторника, так как наш сотрудник по финансовым вопросам, который генерирует push для администратора клиента сайта поставщика, не будет в понедельник.

Будет обновлено, как только я смогу попробовать.

Еще раз спасибо всем, ваша помощь очень ценится, удачных выходных, а для тех из вас, кто является отцом, большого Дня отца.


person Gerry    schedule 17.06.2016    source источник
comment
Самое простое решение действительно может сработать. <cfoutput>#xmlVariable#</cfoutput>.   -  person Dan Bracuk    schedule 17.06.2016
comment
файл поставщика хранится на одном из наших веб-серверов В частности, как? Они отправляют файлы в какой-то cfm-скрипт? Если да, то предложение Дэна попадает в цель.   -  person Leigh    schedule 17.06.2016
comment
Выполнит ли программу, которая выводит ответный XML-файл ... Теоретически да. Пока файл обработан и сгенерирован правильный ответ xml на тот же запрос. По сути, это похоже на то, что им нужно, чтобы вы обработали его, когда он был получен, а не в какой-то более поздний момент времени.   -  person Leigh    schedule 17.06.2016
comment
Это Would executing a program that outputs the response XML file, as Dan suggested, or one with a CFHeader specification as suggested by Sung, be all that is required to send file information back as a response to the vendor at the end of the main program? отличный вопрос. Вы должны спросить об этом у производителя.   -  person Dan Bracuk    schedule 18.06.2016


Ответы (1)


Если поставщик отправляет вам файл XML через протокол HTTPS POST, как вы предлагаете в заголовке, вы можете просто отправить ответ XML, чтобы подтвердить передачу. Вы можете легко отправить ответ:

<cfheader name="Content-Type" value="text/xml">
[create the XML]

Но я бы подумал, что вы хотите провести какую-то проверку? Если вы используете GetHttpRequestData (), вы можете получить обратно много хороших вещей. Просто cfdump и вы увидите.

<cfset data = GetHttpRequestData()>
<cfdump var="#data.content#">

Это даст вам их передачу XML.

person Sung    schedule 17.06.2016
comment
(Edit) ... или, в зависимости от того, что / как опубликовано, проверьте область form. Согласен, похоже, что текущий процесс обрабатывает файлы асинхронно. В то время как отправитель ожидает, что они будут обработаны (или, по крайней мере, каким-то образом подтверждены) синхронно. - person Leigh; 17.06.2016
comment
Мне просто пришлось иметь дело с этим, и это забавно - я использовал CFX_HTTP для имитации вызова конечной точки, и хотя этот вызов использовал POST, через область формы ничего не проходило. Я не совсем понимаю, почему. Затем я немного погуглил и наткнулся на GetHttpRequestData (), который дал мне много хороших вещей. :) - person Sung; 18.06.2016
comment
Да, все зависит от того, что и как выложено. Например, тело запроса обычно присутствует в GetHttpRequestData(), но не в области form. В то время как файл обычно существует в области form, но не GetHttpRequestData(). Обычно они содержат одни и те же данные, но, как и в большинстве случаев ... все зависит от ситуации :) - person Leigh; 18.06.2016
comment
Обычно они содержат одни и те же данные Я должен был быть более конкретным ;-) Для почтовых запросов FORM и GetHttpRequestData (). content обычно содержат одинаковые значения. - person Leigh; 19.06.2016
comment
Дэн, Сун и Ли: Я хочу поблагодарить всех вас за помощь в этом вопросе - то, что было предложено, сработало! Для записи, вот что было закодировано (в CFSCRIPT ›: cfheader (name = Content-Type, value = text / xml); WriteOutput (SQXResponse); Еще раз спасибо - хорошего дня! - person Gerry; 24.06.2016