我们可能永远不知道为什么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网站一起工作?我正在寻找一种有效而可靠的方法来实现这一目标。
答案 0 :(得分:0)
有一种方法可以在运行时动态切换应用ID。必须创建两个应用程序,必须安装两个证书。很少有事情要记住。对于每个经过身份验证的连接,将为用户授予令牌(也称为wctoken)。
当您的redirect.aspx页面(从假设您的重定向页继承自 HealthServiceActionPage )后,用户从Live ID重定向(如果使用了实时ID),则会使用此令牌。 b>。
这意味着每次切换应用程序时,必须将用户重定向到具有新应用程序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;