0

Microsoft が HealthVault アプリケーションを HealthVault アプリケーションの単一の web/app.config エントリに制限することで開発者を制限することを決定した理由はわかりません。ただし、1 つの ASP.NET Web サイトで 2 つ (またはそれ以上) の HealthVault ApplicationID を機能させる必要がありますか? これを行うための効果的で信頼できる方法を探しています。

2 つの異なる HealthVault アプリケーションの背後にある理由の詳細については説明しませんが、それが機能するために必要であるということ以外には触れません。私はまだ MSDN フォーラムに正しくログインできません (無限のリダイレクト サインイン ループを考えてください)。

これを達成する方法についてHealthVault開発者に連絡しましたが、開発者は信頼できないと信じているという提案をしました(間違っている場合はお知らせください)。

開発者の提案は、HealthVault に接続する必要がある場合、ただし接続する前にコードで次のことを行うことでした。

ConfigurationSettings.AppSettings[“ApplicationId”] = “[あなたのアプリ ID]”;

問題は、これが静的プロパティであることです。私たちの Web アプリケーションでは、異なるユーザーが両方の HealthVault アプリケーションに同時にアクセスするため、これは問題だと思います。2 つ (またはそれ以上) の HealthVault ApplicationID を 1 つの ASP.NET Web サイトで動作させるための提案はありますか? これを行うための効果的で信頼できる方法を探しています。

4

1 に答える 1

0

実行時にアプリ ID を動的に切り替える方法があります。両方のアプリケーションを作成し、両方の証明書をインストールする必要があります。覚えておくべきことはほとんどありません。認証された接続ごとに、ユーザーにはトークン (別名 wctoken) が付与されます。

このトークンは、redirect.aspx ページによってユーザーが Live ID (ライブ ID が使用されている場合) からリダイレクトされるときに消費されます (リダイレクト ページが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;
于 2011-10-27T04:46:12.723 に答える