2017-02-15 3 views
0

У меня есть сценарий, в котором я получаю запрос, и на основе этого запроса мне нужно сделать несколько вызовов веб-службы в бэкэнд-системе. Все делается в оркестровке. Бэкэнд-система основана на сеансе, поэтому сначала я выполняю логин, а затем хочу делать свои вещи. Операция входа в систему отвечает заголовком Set-Cookie, я хочу поместить это значение в заголовок Cookie при последующих вызовах. Однако, при попытке сделать это в форме назначения сообщения:Возьмите Set-Cookie из входящего сообщения и поместите в Cookie в исходящее сообщение

msg_request2(HTTP.HttpCookie) = msg_loginresponse(HTTP.HttpCookie) 

Я получаю сообщение об ошибке в окне просмотра событий:

Inner exception: There is no value associated with the property 'HTTP.HttpCookie' in the message. 
Exception type: MissingPropertyException 
Source: Microsoft.XLANGs.BizTalk.Engine 

Я также попытался доступа к HTTP.InboundHttpHeaders из msg_loginresponse, то же самое сообщение об ошибке. Я могу увидеть свойство контекста InboundHttpHeaders в ожидаемом сообщении, поэтому я «знаю», что он есть.

Добавление ссылки на файл Microsoft.BizTalk.GlobalPropertySchemas.dll в моем проекте не помогло.

Какие-нибудь умные предложения?

+0

Во-первых, действительно ли это должно работать именно так? В наши дни файлы cookie для приложений API практически отсутствуют. Вы уверены, что они не обновились до лучшего решения? –

+0

Да, к сожалению, я уверен. Мне жаль, что я не могу просто отправить токен авторизации какого-то типа в мои вызовы, но, поскольку он стоит, я должен сделать логин, а затем скопировать файл cookie во все последующие вызовы. –

ответ

0

После того, как вы сообщили своему руководству, что Торговый партнер использует очень старый и необычный образец, для которого вам придется потратить дополнительное время, то есть деньги, для размещения (эта проблема на 100% создана Торговым партнером), это должно быть довольно просто.

Для адаптера Set-Cookie не приводит к фактическому файлу cookie, поскольку адаптер не имеет понятия сеансов.

Вам нужно разобрать значение cookie из HTTP.InboundHttpHeaders, затем использовать это значение, чтобы установить cookie либо HTTP.HttpCookie, либо HTTP.UserHttpHeaders.

BTW, поскольку токен auth в 99,9% сценариев глупый и ненужный, я всегда избегаю поддерживать токен и просто «auth» каждый раз. Нет причин для того, чтобы вы сделали приложение более сложным. Единственное исключение было бы, если бы одни и те же вызовы выполнялись в одной и той же последовательности каждый раз, тогда вы можете удерживать токен в Orchestration.

Смежные вопросы