我正在使用BizTalk适配器包中的Oracle适配器(BTS 2006 R2基于WCF)。在"请求响应"发送端口的配置中,我使用了Oracle的用户名和密码来连接到数据库。
现在我想更改它并使用SSO。到目前为止,我已经创建了联盟应用程序,并将BTS主机实例"用户id"映射到Oracle数据库的用户详细信息。
当我运行应用程序时,我经常收到错误:"无法兑换票证,消息中不存在票证"。
通过阅读BTS文档,我在"ms-help://MS.BTS.2006/BTS06CoreDocs/html/c7bf755c-c37d-4b19-9817-a7f42e1e9656.htm":在编排调用发送适配器的情况下,BizTalk消息引擎会将消息发送到MessageBox数据库。编排应确保SSOTTicket上下文属性和Microsoft。BizTalk。XLANGs。BTX发动机。维护包含票证的消息的OriginatorSID上下文属性。当适配器从MessageBox数据库接收到此消息时,适配器会使用加密票证调用RedeemTicket方法,以从SSO存储中检索后端凭据。设计编排的用户应专门将此属性复制到消息中。
但我通过SQL集成连接收到一条消息,该消息没有SSO票证。
请帮助解决此问题?
您可以在发送端口的自定义管道组件中添加SSO票证
public IBaseMessage Execute(IPipelineContext pContext, IBaseMessage pInMsg)
{
ISSOTicket ssoTicket = new ISSOTicket();
pInMsg.Context.Write("SSOTicket", "http://schemas.microsoft.com/BizTalk/2003/system-properties", ssoTicket.IssueTicket(0));
return pInMsg;
}
这将为Biztalk主机实例服务帐户生成一个票证,因此您的Oracle附属应用程序映射应该如您所期望的那样工作。
您可能需要在SSO管理员中"允许票证"访问系统属性。如果没有这一点,即使你允许会员应用程序的门票,它也不会起作用。