2012-10-05 26 views
8

Por qué Environment.GetEnvironmentVariable ("variableName") no obtendrá el valor de la variable si la llamada se realiza desde un webMethod alojado en iis y Funcionará si lo llamo desde una consola aplicación en la misma máquina?Environment.GetEnvironmentVariable no encontrará el valor de variable

¿Dónde configuro esas variables para que sean visibles para los servicios web de IIS? ¿Debo usar el segundo parámetro de Environment.GetEnvironmentVariable (name, target) para obtenerlo?

En realidad, es muy simple:

<code> 

[WebMethod(Description = "Gets the environment variable value.")] 
public string GetEnvironmentVariable() 
{ 
    return Environment.GetEnvironmentVariable("VARIABLE_NAME_HERE"); 
} 

</code> 

Y, por cierto, VARIABLE_NAME_HERE se fija en nivel de sistema y de usuario.

Gracias de antemano

+0

Ayudaría si nos mostrara algún código para que podamos ver qué variable está tratando de recuperar. – sergserg

+0

agregó un código a la pregunta, pero es realmente simple ... – Lemmerich

Respuesta

6

Leer aquí para obtener más información:

Using System Wide Environment Variables in .NET Application


Específicamente:

¿Cuáles son las variables de entorno del sistema?

Las variables de entorno son cadenas que guardan información sobre el entorno completo en su sistema. Estos valores de cadena son dinámicos y pueden afectar la forma en que se comportará su sistema. Medio ambiente variables se pueden clasificar en dos tipos principales:

Variables de sistema: Afectan a todo el sistema sea cual sea la corriente usuario es. Están definidos por Windows y guardados en el registro. Usted necesita ser un administrador para poder modificarlos. Por lo general, necesita reiniciar su computadora para que estos cambios sean efectivos.

Variables de usuario: Afectan al entorno actual del usuario del sistema actual . Pueden ser eliminados, modificados y agregados por cualquier usuario del sistema . Son utilizados por la configuración de Windows, por algunos programas y por los usuarios. Los cambios en estas variables se guardan en el registro y entran en vigencia de inmediato .


Si intenta invocar una variable de entorno que no existe en su máquina va a tener problemas. Debe intentar encontrar una variable que exista en su máquina local, pero no en la máquina host de su servicio web.

+0

Ese es el problema, la variable existe tanto en el sistema como en el nivel de usuario en la máquina host = /. Creé una aplicación de consola solo para verificar la variable y funciona (muestra el valor que espero) pero cuando llamo a un ws alojado en iis en esa misma máquina, el mismo método devuelve un valor vacío. – Lemmerich

+4

Oh c *** y todo lo que necesitaba era reiniciar el servidor ... mi aplicación obtenía un valor establecido a nivel de usuario. Tiene sentido ahora. ¡Gracias! – Lemmerich

+1

Me alegro de escuchar lo que descubrió. Si lo desea, edite mi respuesta y agregue su advertencia sobre reiniciar el servidor y por qué necesitaba reiniciarlo. Esta respuesta podría ayudar a otras personas. – sergserg

5

Necesita reiniciar el IIS con el comando iisreset.

8

que enfrentan el mismo problema, y ​​gracias a @sergserg me ocurrió esto y funcionó:

var value = Environment.GetEnvironmentVariable(key, EnvironmentVariableTarget.User) 

la parte importante fue el uso de EnvironmentVariableTarget.User

+0

Esto realmente funciona para el sistema var también. Simplemente cambie el .User a .Machine. Estaba anexando VATH var, y no obtenía el valor establecido de la línea de código usando solo Environment.GetEnvironmentVariable ("PATH") cambiando a Environment.GetEnvironmentVariable ("PATH", EnvironmentVariableTarget.Machine) recuperaba el nuevo valor. – Zunair

+0

Esto funcionó para mí también. Sin él, tuve que reiniciar mi sistema, aunque había agregado una variable de usuario. –

2

reiniciar Visual Studio fijado por mí (adivinando IIS Express también almacena en caché estos valores).

Cuestiones relacionadas