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

时间:2011-04-25 17:38:48

标签: asp.net healthvault

我们可能永远不知道为什么Microsoft决定通过使HealthVault应用程序限制为HealthVault应用程序的单个web / app.config条目来限制开发人员。但是,我需要能够使用一个ASP.NET网站制作2个(或更多)HealthVault ApplicationID吗?我正在寻找一种有效而可靠的方法来实现这一目标。

我不会详细介绍两种不同的HealthVault应用程序背后的推理,但除了说我们需要它才能工作。我仍然无法使用MSDN论坛正确登录(认为无限重定向登录循环)所以我希望这里有一个帖子可以帮助我。

我确实联系过HealthVault开发人员如何实现这一点,但开发人员提出了一个我认为不可靠的建议(如果我错了请告诉我)。

开发人员建议在需要连接到HealthVault时在代码中执行以下操作,但在连接之前:

ConfigurationSettings.AppSettings [“ApplicationId”] =“[您的应用ID]”;

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

1 个答案:

答案 0 :(得分:0)

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

当您的redirect.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;