最近在给一个老项目做数据对接接口。

背景一

该项目最后更新日期为2006年,使用ASP.NET WebForm、.Net2.0、OJB、Castle Avtive Record等。由于是某集团的子系统之一,所以在获取人员信息时,必须使用已经封装好的组件。

背景二

接口对面是一个JAVA项目,一般这种老系统我都建议使用SOAP服务做对接,要是用Restful服务就得再新起一个接口项目专门做JAVA对接,然后再用老系统与接口项目对接,麻烦。结果同事去谈需求的时候压根没注意老项目的年代,一上去就奔着Restful服务去了,聊完以后人家两天就把代码写完了,我们这边懵逼了。让对方改代码也不现实,毕竟一开始是我们考虑欠妥。最后决定,把老项目升级到.Net4.0,直接使用WebAPI。

正文

升级过程非常顺利,编译也没有任何错误。运行一下,功能也都没有任何问题,心里一阵窃喜。那就到正式环境部署一版.Net4.0的跑跑吧,毕竟正式环境还是Windows Server 2003+IIS6.0。部署完毕以后启动后台登录页一看,傻眼了。

一开始以为是服务器配置的问题,结果把发布文件部署在本地也是同样的异常。很明显,这种异常只会出现在发布后的项目里。从调用栈里可以获取到一些信息,但是还是太少。想要调试发布的代码,可以使用VS自带的远程调试工具。

远程调试步骤就不多说,网上有很多例子。调试过程中会遇到无法命中断点的情况。

这种情况有可能是你要调试的项目没有载入断点符号,载入符号的具体步骤如下:

1.打开调试里的模块窗口。

2.找到项目的dll,右键点击加载符号,就能命中断点了。

通过调试发布以后的项目,发现有一处参数传值不正确。正常情况下,参数key的值应该是GetObjectByID,而这里竟然将构造函数传进来了。显然“未将对象引用设置到对象的实例”是由这个key造成的。

沿着调用栈继续往上找,发现一段这样的代码,根据调用栈获取调用函数的名称。也就是说,问题可能出现在skipStack上了。

随后,我将发布前和发布后的调用栈信息输出出来对比(左边是发布前,右边是发布后)。

从输出里可以看到,发布前比发布后多了一步函数调用(因为.Net2.0还不支持参数默认值,所以通过这种方式实现默认参数的效果)。

引起调用栈不一致的原因可能是在Release时,多出的一步调用被编译器优化掉了(我将VS的运行模式换成Release以后异常也能重现)。至于以前为什么没出现这样的问题,可能是当时的编译器优化能力没现在这么强吧,06年那会儿应该是VS2005。

至此,本次抓臭虫的任务圆满完成。

记一次"未将对象引用设置到对象的实例"问题的排查过程的更多相关文章

  1. SQL Sever无法打开链接对话框,未将对象引用设置到对象的实例。(AppIDPackage)

    前几天刚做完系统,先装的是SQL Sever2008,装完后还试了一下,OK~没问题,然后就继续装VS2012等一些软件.搞到很晚没有继续试试就睡了,第二天运行SSMS出问题了..(如图 1.0 所示 ...

  2. WPF中未将对象引用设置到对象的实例

    前几天,我开始了WPF的基础学习,一上来我就遇到了一个令我头痛的问题,按照书上的例子我写了一段属于自己的代码,一个简单的色调器.满心期待的编译运行,就出现了未将对象引用设置到对象的实例.我在网上查阅了 ...

  3. c#:未将对象引用设置到对象的实例--可能出现的问题总结(转)

    1.c#:未将对象引用设置到对象的实例--可能出现的问题总结(转):http://www.cnblogs.com/KeenLeung/archive/2013/06/23/3150578.html

  4. IIS报错 未将对象引用设置到对象的实例。

    在vs中运行正常的项目 ,发布到IIS总是提示 未将对象引用设置到对象的实例. 运行静态页面 html正常,只是打开.aspx页面的时候报错,在确保了数据库,配置,权限均正常的情况下. 错误原因:先安 ...

  5. 解决使用DevExpress开发错误:未将对象引用设置到对象的实例

    在使用DevExpress是总是会出现一些状况.这次同事在他的机器上调试完成的代码发过来,却出现"未将对象引用设置到对象的实例"的错误,提示是Resources.resx的问题.另 ...

  6. asp.net 中Session的运用,及抛出错误“未将对象引用设置到对象的实例”

    1. 页面载入后,必须要等到page_Load方法执行建立 page对象后才可以使用Session 2. 在.aspx和.cs文件中使用Session的区别 (1).aspx: Session[&qu ...

  7. 2014-08-26 解决HttpContext.Current.Session在ashx文件中出现“未将对象引用设置到对象的实例”的问题

    今天是在吾索实习的第35天. 最近在使用HttpContext.Current.Session来获取Session["..."]的值时,常常会弹出错误——“未将对象引用设置到对象的 ...

  8. 一般处理程序中使用Session出现未将对象引用设置到对象的实例

    遇到问题:未将对象引用设置到对象的实例 那就在你的一般处理程序中加入红色背景的代码吧 using System; using System.Collections.Generic; using Sys ...

  9. 解决:getWeatherbyCityName(city),服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。

    原文:getWeatherbyCityName(city),服务器无法处理请求. ---> 未将对象引用设置到对象的实例. 解决方法:不要直接使用 “服务引用” , 添加为 “Web 引用” 最 ...

随机推荐

  1. 关于volatile的一些思考C++

    在c++中,volatile用与修饰容易变动的变量,通常用于多线程的标志,编译器会存在代码优化,假如在同一个大括号中没有修改这么一个参数,那么编译器很可能在读取这个值的时候使用的是快取的方法,即将这个 ...

  2. 2019黑马JAVAEE57期基础班就业班(全套)

    黑马java57期 百度网盘 2019黑马JAVAEE57期基础班就业班(全套)百度网盘 下载 Spring全家桶解决方案 - 微服务认证解决方案(JWT) - 微服务网关解决方案(Zuul) 黑马j ...

  3. 实现点击EditText登录时,界面上移避免键盘遮挡界面

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&quo ...

  4. Book 动态规划

    虽然之前学过一点点,但是还是不会------现在好好跟着白书1.4节学一下—————— (1)数字三角形 d(i,j) = max(d(i+1,j),d(i+1,j+1)) + a[i][j] hdu ...

  5. 算法27-----第N个数字

    1.题目: 在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字. 注意: n 是正数且在32为整形范围内 ( n < 231). ...

  6. PHP SOAP如何传入复杂对象

    Paymentexpress有一个SOAP服务方法Check3dsEnrollment(String username,String password, EnrolmentCheckRequest t ...

  7. Java简述

    Java的特点(11个关键术语)from<Java核心技术I> 1) 简单性 2)  面向对象 3)  分布式 Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议 ...

  8. Shell(五)Shell输入/输出重定向

    Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...

  9. Swoole WebSoctet 使用 zlib 压缩之 PHP 与 pako.js

    一些理论知识 先说一下deflate算法吧,deflate是zip压缩文件的默认算法, 其实deflate现在不光用在zip文件中, 在7z, xz等其他的压缩文件中都用, 实际上deflate只是一 ...

  10. excel2013超链接进不去,提示“您的组织策略不允许...”

    搜索regedit 然后找到HKEY_CURRENT_USER->Software->Classes->.html 右键修改或者双击修改数值数据为Htmlfile 关闭之后此窗口,关 ...