经验和教训

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

你可能感兴趣的:(经验)