1

我有一个用 VS2010 编写的针对 .Net 2.0 框架的 VB.NET Web 应用程序项目(不要问我知道)。我有一个带有导入语句的类,上面写着

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\System.Web 位置的 c:\%WINDIR%\assemblies 中注册.dll 但我在服务器上的版本与本地机器上的版本不同

服务器上的版本是:2.0.50727.3053 我机器上的版本是:2.0.50727.3614

这可能是我的问题的原因吗?谁能想到一个解决问题的好方法?服务器是windows 2003,不知道我是否可以复制它的System.Web.dll并使用regasm在我的本地机器上测试?我无法替换服务器版本,因为那里正在运行其他需要它的 Web 应用程序。

4

2 回答 2

1

我认为您的问题与 DLL 版本无关。我认为您使用Imports语句的方式无法正常工作。通常只导入命名空间而不是类。因为异常消息提到了一个With块(当您导入一个类而不是命名空间时,您正在执行类似于with块正在执行的操作),我相信这是您问题的根源。

试试这个:将您的 Imports 更改为 simple Imports System.Web。然后将会话引用为HttpContext.Current.Session.

这会告诉你这是否是问题所在。为什么它在您的本地机器上工作正常而不是在服务器上我没有任何建议。但首先要看看这是否是问题的根源,然后从那里开始研究......

于 2013-02-20T02:13:56.573 回答
0

对于未来的读者来说,我的问题被证明是相当奇怪的。在我的课程中,我根本无法从 Session 对象中获取东西。不过,它在代码隐藏页面中运行良好。我开始了一个新项目并在那里手动复制了我的代码,它开始正常工作。我相信这是因为我在从网站转换为 webapp 时犯了一个错误。不知道根本原因是什么...

于 2013-03-01T20:40:27.393 回答