如何让HealthVault在同一个应用程序中使用多个ApplicationID



我们可能永远不会知道为什么微软决定通过将HealthVault应用程序限制在单个web/应用程序来限制开发人员。HealthVault应用程序的配置项。然而,我需要能够使2(或更多)HealthVault ApplicationID的工作与一个ASP。网网站?我正在寻找一种有效可靠的方法来做到这一点。

我不会详细讨论两个不同的HealthVault应用程序背后的原因,但除了说我们需要它工作之外。我仍然无法正确登录MSDN论坛(认为无限重定向符号在循环中),所以我希望这里有一个帖子,将帮助我。

我确实联系了HealthVault开发人员如何实现这一点,但是开发人员给出了一个建议,我不相信会是可靠的(如果我错了让我知道)。

开发者的建议是,当你需要连接到HealthVault时,在连接之前,在代码中执行以下操作:

ConfigurationSettings。AppSettings[" ApplicationId "] = "[你的应用ID] ";

问题是这是一个静态属性,我确实认为这是一个问题,因为我们的web应用程序将有不同的用户同时访问两个HealthVault应用程序。有没有人有任何建议,使2(或更多)HealthVault ApplicationID的工作与一个ASP。网网站?我正在寻找一种有效可靠的方法来做到这一点。

有一种方法可以在运行时动态切换应用id。必须创建两个应用程序,必须安装两个证书。有几件事要记住。对于每个经过身份验证的连接,用户将被授予一个令牌(又名wctoken)。

这个令牌在用户被重定向从Live ID重定向回来时被消耗(如果使用Live ID…)。aspx页面(假设您的重定向页面继承自HealthServiceActionPage)。

这意味着每次切换应用程序时,必须将用户重定向到具有新应用程序ID的Live ID以接收新令牌。

下面的代码示例可以让用户动态更改设置:

public class ConfigurationManager : HealthWebApplicationConfiguration
{
    private string appid;
    public ConfigurationManager(string appid)
    {
        this.appid = appid;
    }
    public override Guid ApplicationId
    {
        get
        {
           return AppManager.Current.GetCurrentAppId(this.appid);
        }
    }
}
public class AppManager
{
    private static readonly Object lck = new Object();
    public Guid? App;
    public static AppManager Current
    {
        get
        {
            AppManager mgr = null;
            if (_current == null)
            {
                lock (lck)
                {
                    mgr = new AppManager();
                }
            }
            return mgr;
        }
    }
    private static AppManager _current;
    public Guid GetCurrentAppId(string id)
    {
        return new Guid(id);
    }
}

用法:

ConfigurationManager cm = new ConfigurationManager(your-app-id-here);
HealthWebApplicationConfiguration.Current = cm;

最新更新