IISでホストされているwebMethod内から呼び出しが行われ、コンソールアプリケーションから呼び出した場合に機能する場合、Environment.GetEnvironmentVariable("variableName")
が変数の値を取得しない理由同じマシン?
これらの変数をIIS Webサービスに見えるように設定するにはどうすればよいですか?Environment.GetEnvironmentVariable(name, target)
の2番目のパラメーターを使用して取得する必要がありますか?
それは実際には本当に簡単です:
[WebMethod(Description = "Gets the environment variable value.")]
public string GetEnvironmentVariable()
{
return Environment.GetEnvironmentVariable("VARIABLE_NAME_HERE");
}
ところで、VARIABLE_NAME_HEREはシステムおよびユーザーレベルで設定されます。
詳細についてはこちらをお読みください:
具体的には:
システム環境変数とは
環境変数は、システムの環境全体に関する情報を保存する文字列です。これらの文字列値は動的であり、システムの動作に影響を与える可能性があります。環境変数は、主に2つのタイプに分類できます。
システム変数:現在のユーザーが何であれ、システム全体に影響します。これらはWindowsによって定義され、レジストリに保存されます。それらを変更するには、管理者である必要があります。通常、これらの変更を有効にするには、コンピューターを再起動する必要があります。
ユーザー変数:現在のシステムユーザーの現在の環境に影響します。これらは、システムユーザーが削除、変更、追加できます。これらは、Windowsセットアップ、一部のプログラム、およびユーザーによって使用されます。これらの変数への変更はレジストリに保存され、すぐに有効になります。
マシンに存在しない環境変数を呼び出そうとすると、問題が発生します。ローカルマシンに存在するが、Webサービスのホストマシンには存在しない変数を見つけようとしている必要があります。
私は同じ問題に直面しましたが、@ sergsergのおかげでこれを思いつき、うまくいきました:
var value = Environment.GetEnvironmentVariable(key, EnvironmentVariableTarget.User)
重要なビットはEnvironmentVariableTarget.User
Visual Studioを再起動すると修正されました(IIS Expressはこれらの値もキャッシュします)。
Iisresetコマンドを使用して、IISを再起動する必要があります。