16

Azure アプリケーションが "クラウド" ではなく開発ファブリックで実行されているかどうかを確実に検出するにはどうすればよいですか?

RoleEnvironment.IsAvailable は両方に当てはまります。1つの場合にのみ真実である何かが欲しい.

私のライブラリのユーザーが開発ファブリックで私のライブラリを無料で使用できるようにしたいので、これを求めています。したがって、構成ファイルに個別の識別子またはフラグを手動で配置し、開発用と展開用に 2 つの構成を保持することは現実的ではありません。

4

4 に答える 4

20

1 つのオプションは、以下をRoleEnvironment.DeploymentId確認することです。開発ファブリックで実行している場合は、'deployment(n)' のような名前を付ける必要があります。ここで、n は連番です。運用環境で実行している場合、配置 ID は Guid に似ている必要があります。

他にできることは、ロールのインスタンス名を確認することです。_0実稼働環境では、 (インスタンス 0 を表す)で終わる必要があります。開発ファブリックでは、それはで終わります.0

編集 2013年 1 月 8日 - 私が 2 年以上前に行ったこの回答はかなり時代遅れであることに気付きました! 今もありRoleEnvironment.IsEmulated- 詳細はこちらをご覧ください。

于 2010-05-28T21:48:43.087 に答える
16

Windows Azure 1.5 SDK では、役割インスタンスが Windows Azure コンピューティング エミュレーターで実行されているかどうかをコードから判断するために、 RoleEnvironment.IsEmulated静的ブール プロパティが導入されました。この情報は、スタートアップ タスクにも渡すことができます。これについては、Steve Marx の素晴らしい記事がここにあります。

于 2011-10-04T06:48:40.410 に答える
3

例えば:

開発ファブリックは、Windows Azure ロード バランサーの動作を完全にはシミュレートしません。たとえば、Web ロール インスタンスで実行されているコードが RoleEnvironment.StatusCheck イベント ハンドラー内から SetBusy メソッドを呼び出して、ロール インスタンスをロード バランサーのローテーションから除外する必要があることを示した場合でも、ブラウザのステータスが RoleInstanceStatus.Busy の間。

また、Azure ファブリックは通常、数少ない固定 OS イメージの 1 つで実行されます。したがって、System.Environment も調査できます。Azure ファブリックでのみ発生するいくつかのパターン (つまり、Windows Azure OS に一致する特定の OS バージョンなど)。

于 2010-05-27T11:22:04.973 に答える
1

私がしばらくの間使用してきた非常に単純なテクニックがあり、それを頻繁に使用していることに気づきました。秘訣は、開発マシンに環境変数を設定し、基本的な DOS バッチ ファイル (または PowerShell) 手法を使用して、その変数が存在する場合に不要なものを飛び越えることです。この環境変数はクラウドには存在しません。

これについては、次のブログに投稿しました: Azure FAQ: 本当にクラウドにいるときだけ実行されるスタートアップ タスクを作成できますか?

于 2011-07-27T03:19:04.267 に答える