经验和教训

本文总结了程序开发过程中常见的问题及解决办法,包括缓存失效、接口调用异常、泛型方法使用、类属性设计原则等,并通过实例展示了如何利用反射进行属性值注入和遍历。

Q1. 程序中,Memcached失效,读取出来为null。而其他同事可以正常使用?

可能原因:1.本地时间和服务器时间有差异,而设置缓存过期时间时,对于服务器来说始终是过期的,如:本地时间是14:55,服务器时间是15:00,而设置缓存时保存为14:55+3min,则无论怎么调试,都发现获取出来的缓存为null!

Q2. 站点都用自己写的BaseResult,别用lib4net.IResult
原因:第三方不便于扩展,局限性很大,一旦发现不满足现状时,将面临大批量的修改

Q2. 调用翼支付的webservice接口时抛出异常
原因:xml中的格式必须与原测试DEMO中的格式一致,一般都是由请求参数引起的。遇到最逼的一个问题是,他的金额因为是分为单位,结尾不能有小数点。

Q3. 泛型方法的示例

 1 protected T Exec<T>(string websvcode, string xml, string summary = "")
 2 where T : Guxue.YZF.Response.BaseResponse // 约束一共有好几种
 3 {
 4 this.Prepare(websvcode, summary);
 5 
 6 WsHelper ws = new WsHelper(this, xml);
 7 Response.ResponseResult r = ws.Request();
 8 T obj = (T)Activator.CreateInstance(typeof(T), r); // r是构造参数,那么T必须有一个带有参数的构造函数
 9 return obj;
10 }
View Code

 泛型方法需要系统的学习一下

Q4. 什么时候应该用类属性?
答:如果外部不需要使用这个属性,只是内部类使用,则不要声明属性(避免暴露在外);直接声明变量即可。当需要在外部使用属性或者使用属性的名字时,方可声明。

Q5. 利用反射,将属性值注入到已定义好的实体中

 1 private void RegisterSignInEntity()
 2 { 
 3 plain_text = 123;
 4 PropertyInfo prop = GetSignProperty();
 5 if (prop == null) throw new Exception("实体必须要有Sign属性(不区分大小写)");
 6 prop.SetValue(entity, plain_text, null);
 7 }
 8 private PropertyInfo GetSignProperty()
 9 {
10 Type t = entity.GetType();
11 PropertyInfo[] pis = t.GetProperties();
12 for (int i = 0; i < pis.Length; i++)
13 {
14 string name = pis[i].Name.ToLower();
15 if (name == "sign") return pis[i];
16 }
17 return null;
18 }
View Code

 Q6. 利用反射,遍历属性和属性值

 1 private string SetPlainText(string plain_text, object entity, string sign=null)
 2 {
 3 string result = plain_text;
 4 Type t = entity.GetType();
 5 PropertyInfo[] pis = t.GetProperties();
 6 
 7 for (int i = 0; i < pis.Length; i++)
 8 {
 9 string name = pis[i].Name.ToLower();
10 object value = pis[i].GetValue(entity, null);
11 if (CommFun.IsNullOrEmpty(value)) continue;
12 
13 string strValue;
14 if (value is decimal) // YZF的接口decimal类型的参数不能包含.00(因为它以分为单位)
15 strValue = ((Decimal)value).ToString("#");
16 else
17 strValue = value.ToString();
18 
19 result = result.Replace("{" + pis[i].Name.ToLower() + "}", strValue);
20 }
21 return result;
22 }
View Code

  Q7. MAC绑定失败,登录验证失败,没有确诊原因就猜测以为是DLL证书过期的问题,导致的弯路!

这个问题还蛮严重的,因为自己没有去查明登录出错的原因,便自认为是证书的问题,就导致了一直花时间去研究证书的问题去了!后来,因康老师要我截图爆出来的错误,才发现,错误消息是我自己的程序爆出来的,最终才发现还是同Q1的问题,两台虚拟机时间不一致,导致验证MAC的随机数种子缓存一出来就过期了!!郁闷~~最终解决了,也算是好事!出一事,长一智。

Q8. 对于firefox显示Flash时提示的: 插件 adobe flash 已崩溃?
答:采用禁用 Flash 沙箱特性(还有其他解决方案,但感觉这个简单直接)

32位、64位系统分别用记事本打开

C:\windows\system32\macromed\flash\mms.cfg
C:\windows\syswow64\macromed\flash\mms.cfg

加上下面这行,保存(不能保存则用管理员身份运行记事本)。

ProtectedMode=0

转载于:https://www.cnblogs.com/Denny_Yang/p/3790969.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值