0

我有一个收到请求的场景,根据该请求,我必须对后端系统进行一些 Web 服务调用。一切都在一个编排中完成。后端系统是基于会话的,所以首先我执行登录,然后我想做我的事情。登录操作回复一个 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 

我也试过访问 msg_loginresponse 的 HTTP.InboundHttpHeaders,同样的错误信息。我可以在产生的挂起消息中看到 InboundHttpHeaders 上下文属性,所以我“知道”它在那里。

在我的项目中添加对 Microsoft.BizTalk.GlobalPropertySchemas.dll 的引用没有帮助。

有什么聪明的建议吗?

4

1 回答 1

0

在您通知您的管理层,贸易伙伴正在使用一种非常古老且不寻常的模式,您将不得不为此花费额外的时间,也就是金钱来适应(这个问题 100% 是由贸易伙伴造成的),它应该很简单。

对于适配器,Set-Cookie 不会产生实际的 cookie,因为适配器没有会话的概念。

您需要从 HTTP.InboundHttpHeaders 中解析出 cookie 值,然后使用该值通过 HTTP.HttpCookie 或 HTTP.UserHttpHeaders 设置 cookie。

顺便说一句,由于 99.9% 的场景中的令牌认证是愚蠢和不必要的,我总是避免维护令牌,每次都只是“认证”。你没有理由让你的应用程序更复杂。唯一的例外是,如果每次都以相同的顺序执行相同的调用,那么您可以将令牌保存在 Orchestration 中。

于 2017-02-16T13:25:55.627 回答