可能导致“;对象引用未设置为实例";在IIS上使用https,但在使用普通http进行测试时没有

本文关键字:https 测试 http IIS 对象引用 设置 quot 实例 | 更新日期: 2023-09-27 17:59:23

我有一个账单支付web应用程序,我正在与Authorize.net(AIM)通信,该应用程序自己使用会话变量来收集和存储提交的数据,然后将这些相同的变量应用于在SQL中存储数据项。最初,当我在Visual Studio中编译和测试时,该应用程序运行良好,但当我将其放到生产IIS服务器(7.0)上时,每次都会出现异常。。。"对象引用未设置为对象的实例"。现在我意识到我在IIS上得到的错误与会话变量有关,但得到了这个。。当我不强制使用https或在地址栏中键入它时,它就可以正常工作。显然,我需要SSL处理事务,但强制使用https似乎会干扰我的会话变量。我使用URL重写功能,但强制使用https,但我删除了它,然后手动转到地址栏中的https,但是仍然存在同样的问题。

有什么想法或方法可以解决这个问题吗?

在本地IIS(自签名安全证书)上测试两者我得到以下。。。

    [NullReferenceException: Object reference not set to an instance of an object.]
   deco.mgobilling.com.controls.Confirmation.Page_Load(Object sender, EventArgs e) +47
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
   System.Web.UI.Control.OnLoad(EventArgs e) +92
   System.Web.UI.Control.LoadRecursive() +54
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Control.LoadRecursive() +145
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772

page_load甚至调用在上一个页面上分配的会话变量,但当网站位于https下时,这些变量似乎为null或丢失。然而,当站点设置为正常http协议时,情况并非如此。

可能导致“;对象引用未设置为实例";在IIS上使用https,但在使用普通http进行测试时没有

IIS>会话状态>Cookie设置>使用URI

这个问题明显与会话变量有关,所以我尝试使用Cookie会话ID,并能够通过这种方式解决这个问题。我在不更改Web的情况下应用了上述设置。配置文件,但Web。配置设置当然是一个选项。

有关会话状态的更多信息,请点击此处。。。ASP。NET会话状态概述

更新

因此,在将我的IIS配置更改为使用cookieless(URI)后,我可以填写一个表格,然后转到另一个页面来确认我填写了什么。当我回到同一个表格并输入不同的数据时,出现了一个新问题。当我输入不同的数据并按提交确认我的输入时,数据就会被擦除。

回到绘图板上,我将IIS中的"Cookie设置"更改为"使用设备配置文件",然后再次进行测试。到目前为止,它可以在不同的浏览器上使用不同的数据集。希望这能最终解决问题。

最终更新

然而,我们仍然面临这个问题。它似乎是间歇性的,在一个网络浏览器中发生,但在下一个浏览器中不会发生。经过一些艰苦的故障排除,我发现我的会话正在丢失,因为作为过程的一部分,我正在与另一个网站进行通信。会话保存在我的网络表单之间,但一旦第二个网络表单启动与另一个网站的通信,"扑通",它们就消失了。这是一个支付过程,它与Authorize进行通信。网这可能是某些浏览器上的安全问题,我可以理解。查询字符串不是一个选项,我没有时间设置IIS来保存会话声明的其他软件,但我只是觉得这与浏览器行为有关。

我的最终解决方案是使用控制。FindControl方法,并从上一个页面(在我的情况下是web用户控件)获取输入值。当我获取输入值并将其分配给第二个页面中的局部变量时,一切都很好,然后我可以使用这些变量来完成Authorize。Net POST、SQL存储、电子邮件等。

我希望这能帮助到未来的某个人。我花了几个小时在谷歌上试图弄清楚这一点。