如果从IIS上托管的webMethod中进行调用,为什么Environment.GetEnvironmentVariable("variableName")
不会获得变量值?如果我从同一台机器上的控制台应用程序调用它,它将起作用?
我在哪里设置这些变量以使IIS Web服务可见?我应该使用Environment.GetEnvironmentVariable(name, target)
中的第二个参数来获取它吗?
实际上非常简单:
[WebMethod(Description = "Gets the environment variable value.")]
public string GetEnvironmentVariable()
{
return Environment.GetEnvironmentVariable("VARIABLE_NAME_HERE");
}
顺便说一下,VARIABLE_NAME_HERE设置在系统和用户级别。
答案 0 :(得分:24)
我遇到了同样的问题,感谢@sergserg,我提出了这个问题并且有效:
REPETER(2)
.INSTRUCTIONS(() => {
xxx = xxx + 1 ;
REPETER(5)
.INSTRUCTIONS(() => {
xxx = xxx + 2 ;
alert(i_repeter);
}
);
}
);
重要的一点是使用var value = Environment.GetEnvironmentVariable(key, EnvironmentVariableTarget.User)
答案 1 :(得分:21)
重新启动Visual Studio为我修复了它(猜测IIS Express也会缓存这些值)。
答案 2 :(得分:13)
请阅读此处了解更多信息:
Using System Wide Environment Variables in .NET Application
具体做法是:
什么是系统环境变量?
环境变量是保存有关的信息的字符串 系统中的整个环境。这些字符串值是动态的 它们会影响系统的运行方式。环境 变量可分为两种主要类型:
系统变量:无论当前是什么,它们都会影响整个系统 用户是。它们由Windows定义并保存在注册表中。您 需要是管理员才能修改它们。你通常 需要重新启动计算机才能使这些更改生效。
用户变量:它们会影响当前的当前环境 系统用户。它们可以被任何系统删除,修改和添加 用户。它们由Windows安装程序,某些程序和用户使用。 对这些变量的更改将保存到注册表并生效 立即
如果您尝试调用计算机上不存在的环境变量,则会出现问题。您必须尝试查找本地计算机上存在的变量,但不能在Web服务的主机上查找。
答案 3 :(得分:8)
您需要使用iisreset命令重新启动IIS。
答案 4 :(得分:0)
cmd
、PowerShell 和 Visual Studio(可能也由 VS Code)共享一个 DLL 或一些代码,它们在加载时缓存环境变量(每个应用程序单独)。
因此,如果您正在测试要更改环境变量的内容,而不是重新启动 IDE(这很慢),您只需启动一个单独的 cmd
或 PowerShell 来测试、更改环境变量,然后只需重新启动 cmd
或 PowerShell。我推荐 PowerShell,因为您可以使用向上箭头重复使用在之前会话中键入的命令。