我有一个用VS2010编写的VB.NET Web应用程序项目,目标是.Net 2.0框架(不要问我知道)。我有一个带有导入语句的类
Imports System.Web.HttpContext
降低我尝试使用
Current.Session("username") = "user"
Current.Session("psswd") = "psswd"
Current.Session("dbName") = "database"
If (IsNothing(Current.Session("username")) Or IsNothing(Current.Session("psswd")) Or IsNothing(Current.Session("dbName"))) Then
Current.Response.StatusCode = 402
Else
' Do some stuff here
End if
它可以在我的个人计算机(Windows XP SP3)上运行正常但在服务器上中断。我无法在服务器上调试它,所以我依靠堆栈跟踪来给我错误。
Stacktrace给了我
[NullReferenceException: Object variable or With block variable not set.]
Microsoft.VisualBasic.CompilerServices.Container..ctor(Object Instance) +497860
Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack) +373
letter_main.Logon.login_user() in C:\VSProjects\letter_main\letter_main\Old_App_Code\Logon.vb:55
letter_main._Default.Page_Load(Object sender, EventArgs e) in C:\VSProjects\letter_main\letter_main\Default.aspx.vb:32
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +62
Logon.vb中的第55行是'Current.Response.StatusCode = 402',如果它设法将值放在会话中,它应该永远不会到达。我猜它没有?
所以我调查了两台机器上的System.Web.dll,发现两者都是从位置C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727中的c:\%WINDIR%\ assemblies中注册的System.Web.dll但我在服务器上的版本与本地机器上的版本不同
服务器上的版本是:2.0.50727.3053 我机器上的版本是:2.0.50727.3614
这可能是我问题的原因吗?有人能想出一个很好的排除故障的方法吗?服务器是Windows 2003,不知道我是否可以复制它的System.Web.dll并使用regasm在我的本地机器上进行测试?我无法替换服务器版本,因为在那里运行其他需要它的Web应用程序。
答案 0 :(得分:1)
我不认为您的问题与DLL版本有任何关系。我认为使用Imports
语句的方式无法正常工作。通常的做法是仅导入名称空间,而不导入类。因为异常消息提到了With
块(当您导入类而不是命名空间时,您正在执行类似于with
块正在执行的操作),我相信这是您的来源问题
试试这个:将您的导入更改为Imports System.Web
。然后将会话引用为HttpContext.Current.Session
。
这将告诉您这是否是问题。为什么它在本地机器上运行正常而不在服务器上我没有任何建议。但首先要看看问题是否是问题的根源,然后再从中进行磨练......
答案 1 :(得分:0)
对于未来的读者,我的问题结果相当奇怪。在我的课程中,我无法从Session对象中获取所有内容。它虽然在代码隐藏页面中运行良好。我开始了一个新项目并手动复制了我的代码,它开始正常工作。我相信这是因为我在从网站转换为webapp时犯了一个错误。不确定根本原因是什么......