如何从WebMethod访问全局变量?

时间:2011-10-11 14:17:16

标签: c# asp.net ajax global-variables webmethod

我有以下全局变量:

private ArrayList listSelectedUnavailables
    {
        get
        {
            return (ArrayList)ViewState["listSelectedUnavailables"];
        }
        set
        {
            ViewState["listSelectedUnavailables"] = value;
        }
    }

我可以在网络表单的每个过程中使用它。

但是,我需要在同一个WebForm中的WebMethod中使用它,但似乎不能识别任何全局变量。所以:

如何从WebMethod访问全局变量?

4 个答案:

答案 0 :(得分:3)

您将值存储在Viewstate中,而WebMethod将无法使用该值,请尝试使用“Session”变量。

 private ArrayList listSelectedUnavailables
    {
        get
        {
            return (ArrayList)Session["listSelectedUnavailables"];
        }
        set
        {
            Session["listSelectedUnavailables"] = value;
        }
    }

答案 1 :(得分:2)

ViewState属性取决于让页面(.aspx)回发一个视图状态,这就是存储“变量”的位置。 WebMethod不包括整页回发(如果有任何回发),因此没有查看状态。相反,您可能希望使用会话变量,如:

    private ArrayList listSelectedUnavailables
    {
        get
        {
            return (ArrayList)Session["listSelectedUnavailables"];
        }
        set
        {
            Session["listSelectedUnavailables"] = value;
        }
    }

会话将变量存储在Web服务器的内存中(但与特定的浏览器会话相关)。这有它自己的缺点,例如工作流程重置易失性,负载平衡消耗等等。

答案 2 :(得分:2)

您无法访问Web方法中的非静态属性。如果您的业务规则允许您应该使用静态属性

答案 3 :(得分:0)

是的,你可以。 'VB .net示例  _     公共共享函数LoadController(ByVal serial As String)As String

    ' sample 1: server object
    ' •————————————————————————————————————————————————————•
    ' Crear un objeto server, porque desde un webmethod no se puede acceder directamente....
    ' •————————————————————————————————————————————————————•
    Dim objServer As System.Web.HttpServerUtility
    objServer = HttpContext.Current.Server
    Dim lAplicacion As New Aplicacion(objServer.MapPath("~"))
    Return objServer.MapPath("~") ' ---> P:\Projects\WebApplicationServer\WebApplication\
    ' •————————————————————————————————————————————————————•


    ' sample 2: local variable
    ' •————————————————————————————————————————————————————•
    ' Acceder a variables de sesion 
    ' •————————————————————————————————————————————————————•
    ' Crear un objeto Session (visible solo al uaurio actual), porque desde un webmethod no se puede acceder directamente....
    ' Crear la variable = Session("objSession") = "Esto es una variable de sesion"
    Dim objSesion As System.Web.SessionState.HttpSessionState
    objSesion = HttpContext.Current.Session

    If objSesion.Item("objSession") Is Nothing Then
        Return "No existe la variable local"
    Else
        Return objSesion("objSession").ToString
    End If
    ' •————————————————————————————————————————————————————•


    ' sample 3: global variable
    ' •————————————————————————————————————————————————————•
    ' Acceder a variables de aplicacion 
    ' •————————————————————————————————————————————————————•
    ' Crear un objeto Aplicacion (visible a todos los visitantes) , porque desde un webmethod no se puede acceder directamente....
    ' Crear la variable = Application("objAplicacion") = "Esto es una variable global..."
    Dim objAplicacion As System.Web.HttpApplicationState
    objAplicacion = HttpContext.Current.Application


    If (Not objAplicacion("objAplicacion") Is Nothing) Then
        Return objAplicacion("objAplicacion").ToString
    Else
        Return " No existe la variable global..."
    End If
    ' •————————————————————————————————————————————————————•
End Function

// C#示例: [WebMethod(Description =“Proiecto”,CacheDuration = 0)] public static string LoadController(string serial) {

// sample 1: server object
// •————————————————————————————————————————————————————•
// Crear un objeto server, porque desde un webmethod no se puede acceder directamente....
// •————————————————————————————————————————————————————•
System.Web.HttpServerUtility objServer = default(System.Web.HttpServerUtility);
objServer = HttpContext.Current.Server;
Aplicacion lAplicacion = new Aplicacion(objServer.MapPath("~"));
return objServer.MapPath("~");
// ---> P:\Projects\WebApplicationServer\WebApplication\
// •————————————————————————————————————————————————————•


// sample 2: local variable
// •————————————————————————————————————————————————————•
// Acceder a variables de sesion 
// •————————————————————————————————————————————————————•
// Crear un objeto Session (visible solo al uaurio actual), porque desde un webmethod no se puede acceder directamente....
// Crear la variable = Session["objSession"] = "Esto es una variable de sesion"
System.Web.SessionState.HttpSessionState objSesion = default(System.Web.SessionState.HttpSessionState);
objSesion = HttpContext.Current.Session;

if (objSesion.Item("objSession") == null) {
    return "No existe la variable local";
} else {
    return objSesion("objSession").ToString;
}
// •————————————————————————————————————————————————————•


// sample 3: global variable
// •————————————————————————————————————————————————————•
// Acceder a variables de aplicacion 
// •————————————————————————————————————————————————————•
// Crear un objeto Aplicacion (visible a todos los visitantes) , porque desde un webmethod no se puede acceder directamente....
// Crear la variable = Application["objAplicacion"] = "Esto es una variable global..."
System.Web.HttpApplicationState objAplicacion = default(System.Web.HttpApplicationState);
objAplicacion = HttpContext.Current.Application;


if (((objAplicacion("objAplicacion") != null))) {
    return objAplicacion("objAplicacion").ToString;
} else {
    return " No existe la variable global...";
}
// •————————————————————————————————————————————————————•

}