我们可能永远不会知道为什么微软决定通过将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;