BizTalk解决SSO错误“无法兑换故障单,消息中不存在故障单”

时间:2008-10-13 22:22:43

标签: single-sign-on biztalk biztalk2006r2

我正在使用BizTalk Adapter Pack中的Oracle适配器(基于BTS 2006 R2的WCF)。在“请求 - 响应”发送端口的配置中,我使用了Oracle的用户名和密码来连接数据库。

现在我想改变它并使用SSO。到目前为止,我已经创建了Affiliate应用程序并将BTS主机实例“用户ID”映射到Oracle数据库用户详细信息。

当我运行应用程序时,我不断收到错误:“无法兑换票证,邮件中不存在票证”。

通过BTS文档阅读我在“ms-help://MS.BTS.2006/BTS06CoreDocs/html/c7bf755c-c37d-4b19-9817-a7f42e1e9656.htm”中找到以下内容: 在业务流程调用发送适配器的情况下,BizTalk消息传递引擎将消息发送到MessageBox数据库。业务流程应确保维护包含故障单的消息的 SSOTicket 上下文属性和 Microsoft.BizTalk.XLANGs.BTXEngine.OriginatorSID 上下文属性。当适配器从MessageBox数据库接收此消息时,适配器使用加密的票证调用RedeemTicket方法以从SSO存储中检索后端凭据。设计业务流程的用户应该专门将此属性复制到消息中。

但是我通过SQL集成连接收到一条消息,它没有SSO Ticket。

请帮忙解决此问题?

2 个答案:

答案 0 :(得分:4)

您可以在发送端口的自定义管道组件中添加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联盟应用程序映射应该按预期工作。

答案 1 :(得分:0)

你可能需要"允许门票"到SSO管理员中的系统属性。如果没有它,即使您允许加入联盟应用程序的门票也不会起作用。