如何从WebMethod中访问全局变量
本文关键字:访问 全局变量 WebMethod | 更新日期: 2023-09-27 18:10:52
我有以下全局变量:
private ArrayList listSelectedUnavailables
{
get
{
return (ArrayList)ViewState["listSelectedUnavailables"];
}
set
{
ViewState["listSelectedUnavailables"] = value;
}
}
我可以在webform的每一个过程中使用它。
然而,我需要在一个WebMethod中使用它,我在同一个WebForm中,但它似乎没有识别任何全局变量。所以:
如何从WebMethod访问全局变量?
您将值存储在Viewstate中,该值对WebMethod不可用,请尝试使用'Session'变量代替。
private ArrayList listSelectedUnavailables
{
get
{
return (ArrayList)Session["listSelectedUnavailables"];
}
set
{
Session["listSelectedUnavailables"] = value;
}
}
一个ViewState
属性依赖于有一个页面(.aspx)发回一个视图状态,这就是你的"变量"存储的地方。WebMethod
不包含完整的页面回发(如果有回发的话),因此没有视图状态供它读取。相反,您可能希望使用会话变量,如:
private ArrayList listSelectedUnavailables
{
get
{
return (ArrayList)Session["listSelectedUnavailables"];
}
set
{
Session["listSelectedUnavailables"] = value;
}
}
会话将变量存储在web服务器的内存中(但与特定的浏览器会话相关)。这有它自己的缺点,比如对工作进程重置不稳定,负载平衡的考虑,等等。
你不能在web方法中访问非静态属性。如果您的业务规则允许,您应该使用静态属性
可以。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(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...";
}
// •————————————————————————————————————————————————————•
}