Как получить доступ к глобальной переменной из WebMethod? - PullRequest
1 голос
/ 11 октября 2011

У меня есть следующая глобальная переменная:

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

Я могу работать с ней в каждой отдельной процедуре веб-формы.

Однако мне нужно использовать ее в WebMethod, который яесть в той же WebForm, но, похоже, не идентифицировать ни одну из глобальных переменных.Итак:

Как я могу получить доступ к глобальной переменной из WebMethod?

Ответы [ 4 ]

3 голосов
/ 11 октября 2011

Вы сохраняете значение в Viewstate, которое не будет доступно для WebMethod, попробуйте вместо этого использовать переменную 'Session'.

 private ArrayList listSelectedUnavailables
    {
        get
        {
            return (ArrayList)Session["listSelectedUnavailables"];
        }
        set
        {
            Session["listSelectedUnavailables"] = value;
        }
    }
2 голосов
/ 11 октября 2011

вы не можете получить доступ к нестатическому свойству в веб-методе.если ваше бизнес-правило позволяет использовать статическое свойство

2 голосов
/ 11 октября 2011

Свойство ViewState зависит от того, будет ли страница (.aspx) отправлять обратно состояние просмотра, где хранится ваша «переменная».A WebMethod не включает в себя постбэк на всю страницу (если он вообще есть), поэтому для него нет состояния просмотра для чтения.Вместо этого вы можете использовать переменную сеанса, например:

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

Сеанс хранит переменную в памяти веб-сервера (но относится к определенному сеансу браузера).У этого есть свои недостатки, такие как непостоянство сброса рабочего процесса, распределение нагрузки и т. Д.

0 голосов
/ 22 августа 2013

Да, вы можете. 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)] публичная статическая строка LoadController (последовательный ряд) {

// 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...";
}
// •————————————————————————————————————————————————————•

}

...