Azureアプリケーションが開発ファブリックで実行されていることを検出する方法は?
-
04-10-2019 - |
質問
Azureアプリケーションが「クラウド」ではなく開発ファブリックで実行されているかどうかを信頼性を検出するにはどうすればよいですか?
RoleenVironment.Isavailableは両方に当てはまります。私は1つのケースでのみ真実なものが欲しいです。
私のライブラリのユーザーが私のライブラリを開発するために私のライブラリを無料で使用できるようにしたいので、私はこれを求めています。したがって、手動で個別の識別子またはフラグを構成ファイルに配置し、devとdeployの2つの構成を保持することは実行不可能です。
解決
1つのオプションは、見てみることです RoleEnvironment.DeploymentId
- 開発ファブリックで実行している場合は、「展開(n)」などの名前が必要です。ここで、nはシーケンシャル番号です。生産を実行している場合、展開IDはGUIDに似ているはずです。
別のことができることは、役割のインスタンス名を見ることです。生産では、で終わるはずです _0
(インスタンス0を表す)。開発生地では、で終わります .0
2013年1月8日編集 - 私が2年以上前に与えたこの答えは非常に時代遅れです!今もあります RoleEnvironment.IsEmulated
- 詳細を確認してください ここ.
他のヒント
Windows Azure 1.5 SDKが導入しました Roleenvironment static boolプロパティWindows Azure Compute Emulatorでロールインスタンスが実行されているかどうかをコードから決定します。この情報は、スタートアップタスクにも渡すことができます。スティーブマルクスからの素晴らしい記事があります ここ そのことについて。
例えば:
開発ファブリックは、Windows Azure Load Balancerの動作を完全にシミュレートしません。たとえば、Webロールインスタンスでコードを実行しているコードは、RoleenVironment.Statuscheckイベントハンドラー内からSetBusyメソッドを呼び出している場合、ロードバランサーのローテーションからロールインスタンスを取り出す必要があることを示す場合、あなたはあなたの役割にアクセスすることができますブラウザのステータスはbolionstanceStatus.busyです。
また、Azureファブリックは通常下を走ります 数少ない固定OS画像の1つ. 。したがって、system.environmentを調査することもできます。 Azureファブリックでのみ発生するパターンの場合(つまり、Windows Azure OSまたはこのようなものに一致する特定のOSバージョン)。
私がしばらく使用してきた非常にシンプルなテクニックがあります - そして、自分が頻繁にそれを使用していることに気づきます。トリックは、開発者マシンに環境変数を設定し、基本的なDOSバッチファイル(またはPowerShell)テクニックを使用して、その変数が存在する場合は不要なものをジャンプすることです。この環境変数はクラウドに存在しません。
私はここでそれについてブログに書きました: Azure FAQ:クラウド内に実際に実行された場合にのみ実行するスタートアップタスクを作成できますか?