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 }
泛型方法需要系统的学习一下
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 }
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 }
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