2008-09-26 9 views
10

Acabo de escribir mi primer servicio web, así que supongamos que el conocimiento de mi servicio web no existe. Quiero intentar llamar a una función dbClass desde el servicio web. Sin embargo, necesito algunos parámetros que están en la sesión. ¿Hay alguna manera de que pueda obtener estas llamadas de estas variables de sesión desde el servicio web?Variables de sesión y servicios web

Respuesta

20

Si está utilizando servicios web ASP.NET y desea tener un ambiente de sesión mantenida para usted, usted necesita para embellecer su método de servicio web con un atributo que indica que necesita una sesión.

[WebMethod(EnableSession = true)] 
public void MyWebService() 
{ 
    Foo foo; 
    Session["MyObjectName"] = new Foo(); 
    foo = Session["MyObjectName"] as Foo; 
} 

una vez hecho esto, puede acceder a los objetos similares a aspx sesión.

Metro.

+0

Esto se ve fantástico. Tengo entendido, sin embargo, que los clientes del servicio web deberán devolver una cookie o responder un mensaje 302 Encontrado redireccionando. – froggythefrog

+0

Puede crear un contenedor de cookies y conectarlo a su proxy de servicio web. A continuación, mantendrá las cookies devueltas, incluida la cookie de sesión de ASP.net. si tiene otros proxies que operarán dentro de la misma sesión, puede compartir el contenedor de cookies con ellos también. – Metro

0

Tal vez esto funcionará HttpContext.Current.Session [ "Nombre] O de lo contrario podría tener que tomar en algunos parámetros o almacenarlos en una base de datos

3

En general, los servicios web no deben basarse en los datos de la sesión. Piense en ellos como métodos ordinarios: los parámetros entran y sale una respuesta.

+0

¿Por qué no? Estoy intentando implementar algo de seguridad, cuando un usuario inicia sesión en mi aplicación web, establezco una variable de sesión, para asegurar que el usuario que llamó al método haya iniciado sesión exitosamente en mi aplicación web, verifico esa variable de sesión y luego solo ejecuto el método web si tener los privilegios correctos, ¿es malo? ¿Cuál es la forma correcta de lograr mi objetivo? – EaziLuizi

+1

Normalmente, a cada cliente se le debe emitir un token para que lo conserve.Luego enviaría ese token con cada solicitud como un encabezado, una querystring o un cuerpo de formulario para autenticarse. –

0

Su pregunta es un poco vaga, pero haré todo lo posible para responder.

Supongo que las variables de sesión existen en el servidor que realiza la llamada al servicio web, y no en el servidor que aloja el servicio web. En ese caso, deberá pasar los valores necesarios como parámetros de sus métodos de servicio web.

5

Debe evitar aumentar la complejidad de la capa de servicio al agregar variables de sesión. Como alguien señaló anteriormente, piense en los servicios web como métodos aislados que toman todo lo que se necesita para realizar la tarea desde su lista de argumentos.

1

si tiene que querer Session ["username"]. ToString(); al igual que en los demás # páginas C detrás aspx entonces simplemente debe sustituir [WebMethod] por encima del método de servicio Web con [WebMethod (EnableSession = true)]

gracias a :) metro

0

Para utilizar la sesión de servicio web tenemos que siga 2 pasos:

  1. Utilice el atributo [WebMethod (EnableSession = true)] en el método.
  2. Sesión ["Nombre"] = 50 (lo que quieras guardar) Por favor, comprueba el siguiente ejemplo.
 
[WebMethod(EnableSession = true)] 
public void saveName(string pname) 
{ 
    Session["Name"] = pname; 

} 

Cuestiones relacionadas