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

背景一

该项目最后更新日期为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. 一名3年工作经验的java程序员应该具备的技能

    一名3年工作经验的Java程序员应该具备的技能,这可能是Java程序员们比较关心的内容.我这里要说明一下,以下列举的内容不是都要会的东西—-但是如果你掌握得越多,最终能得到的评价.拿到的薪水势必也越高 ...

  2. Spring学习笔记(二) 初探Spring

    版权声明 笔记出自<Spring 开发指南>一书. Spring 初探 前面我们简单介绍了 Spring 的基本组件和功能,现在我们来看一个简单示例: Person接口Person接口定义 ...

  3. 基础apache命令

    在启动Apache服务之前,可以使用下面的命令来检查配置文件的正确性. C:\Apache2.2\bin> httpd  -n  Apache2.2  -t 还可以通过命令行控制Apache服务 ...

  4. sql server 授权相关命令

    原文:https://blog.csdn.net/hfdgjhv/article/details/83834076 https://www.cnblogs.com/shi-yongcui/p/7755 ...

  5. canvas绘制饼型图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. input 框输入数字相关

    input框限制只能输入正整数,逻辑与和或运算 有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数 代码如下: &l ...

  7. 响应式网页设计:互联网web产品RWD概念

    RWD(Responsive Web Design)可称为自适应网页设计.响应式网页设计.响应式网页设计等等,是一种可以让网页的内容可以随着不同的装置的宽度来调整画面呈现的技术,让使用者可以不需要透过 ...

  8. js在当前日期基础上,加1天 3天 7天 15天

    需求 点击保障期的天数 根据起始时间算出结束时间 代码 //点击保障期触发的方法 periodChange(val,id){ this.activeNumperiod=val this.submitD ...

  9. MySQL Reading table information for completion of table and column names

    打开数据库是发现提示: mysql> show databases; +--------------------+ | Database | +--------------------+ | b ...

  10. POJ 1743 [USACO5.1] Musical Theme (后缀数组+二分)

    洛谷P2743传送门 题目大意:给你一个序列,求其中最长的一对相似等长子串 一对合法的相似子串被定义为: 1.任意一个子串长度都大于等于5 2.不能有重叠部分 3.其中一个子串可以在全部+/-某个值后 ...