尽管自己的博客有几篇技术文章,但基本都是转载而来的,今天也通过自己解决的一个问题,写出自己的第一篇技术文章。可能涉及到的东西很浅显,但主要是让自己印象更深刻,也供今后查阅。
这次所涉及到的是最近一直在做的针对手机设备开发的asp.net mobile页面。因为所要实现的功能是通过asp.net 2.0开发WAP页面去替换以前老的WAP站点。因为公司是做SP的,所以老的WAP站点是按照移动所提供的接口要求进行开发的,而我的这次修改尽管在模拟器上通过internet方式可以访问,但是替换掉以前的站点之后,通过手机上移动梦网的方式就无法获取到我的页面了,因为这个问题也困扰了很长时间。现在能做的只能是尽可能的把用户访问站点时的相关信息通过保存到自己写的日志文件的里来查找问题所在。虽然我的日志已经打出了header,useragent,但是技术总监还要求我能打出客户端所看到的页面源代码。可能因为这个需求很奇怪,大家会认为是多此一举,但是手机访问时无法看到其页面源代码的。而在网上自然就比较难找到相应的方法。
此后,考虑到要对页面生命周期进行了解。先错误的考虑到在Page_prerender中利用response.outputstream来读取发送出去的页面数据,但是response.outputstream是只写的所以只有另想办法。后来发现应该重载render函数,就是在页面被呈现之前把数据保存下来,具体代码如下:
{
MemoryStream ms = new MemoryStream();
TextWriter tx = new StreamWriter(ms);
MobileCapabilities currentCapabilities = (MobileCapabilities)Request.Browser;
WmlMobileTextWriter wml = new WmlMobileTextWriter(tx, currentCapabilities, this);
base.Render(wml);
wml.Flush();
byte[] By = ms.ToArray();
string s = Encoding.UTF8.GetString(By);
ASP.global_asax.lg.writeLog(" 客户端看到的页面内容:" +s);
wml.Close();
tx.Close();
ms.Close();
base.Render(writer);
}
因为是强制输出WML的,所以用到了WmlMobileTextWriter,希望对需要的人有所帮助!