logo资料库

wap程序---微软的程序.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
asp.net 开发 wap 必备:更好的匹配手机设备-.NET 教程,Asp.Net 开发 虽然微软说 asp.net 能够匹配各种手机设备,但是手机型号众多,微软收集的手机资料有 限,所以导致 asp.net 对很多手机匹配错误,本来可以支持 html 的却生成 html,本来只 支持 wml 的,缺生成了 html 导致手机无法浏览;我们不能等待微软偶尔发布一个设备更 新包---更新有限的手机设备资料,这里我们自己都可以做: asp.net 识别设备型号是靠 machine.config 或者 web.config 对 http 协议 http_user_agent 设备标示来匹配的,具体的你可以打开 machine.config 里面打开 节来看看。 下面是“强制特定手机生成 wml” 详细的代码,在 web.config 里的 节添加以下代码: preferredrenderingtype = "wml11" preferredrenderingmime = "text/vnd.wap.wml" preferredimagemime ="image/vnd.wap.wbmp" 代码说明:
这里强制生成 wml preferredrenderingtype = "wml11" preferredrenderingmime = "text/vnd.wap.wml" preferredimagemime ="image/vnd.wap.wbmp" 最重要就是 这里是在匹配设备,可以参考正则表达式语法,sec-sghx458 代表三星 x458, motorola-t33 代表摩托 e360 文章整理:站长天空 网址:http://www.z6688.com/ 以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! 配置了 IIS,,建立了一个 asp.net mobile 工程,又加上了关于 WML MIME 的映射条目,满以为可以测试 了,于是启动 M3Gate,但是失败了,地到的信息为: “UTF-8 格式不支持”类的错误,于是检查 web.config.的 修改为 再一次启动 IE,测试通过,但是 M3Gate 再一次报错:大致意思为: 对于 Text/Html 格式不支持。 思考,为什么 M3Gate 得到 html 格式的响应而不是 wml 呢?翻阅资料,结合 asp.net 的 WAP 框架知道,原 来,对于设备,需要指定设备的类型,明确通过配置文件告诉框架如何解释 asp.net 的执行结果,这种执行 可能解释成 HTML 也可能解释为 WML,取决于设备是否匹配。那设备匹配是如何实现的呢?主要是通过 machine.cong 文件的或者 web.config 文件的 节,通过 HTTP_USER_AGENT 获取设备标示,只是框架获得设备的一些参数,从而在框 架的配置下得到合适的 wml 文件。 M3Gate 不是标准的 mobile 设备,所以框架不认识,缺省状况下按照 html 设备输出,导致上述错误。 解决办法:让框架知道 M3Gate 是一个设备。 于是,查找 machine.config ,取出其中的一段,复制到 web.config
type = "Ericsson R380" version = ${browserMajorVersion}.${browserMinorVersion} majorVersion = ${browserMajorVersion} minorVersion = ${browserMinorVersion} preferredRenderingType = "wml11" preferredRenderingMime = "text/vnd.wap.wml" preferredImageMime = "image/vnd.wap.wbmp" inputType = "virtualKeyboard" canInitiateVoiceCall = "true" mobileDeviceManufacturer = "Ericsson" mobileDeviceModel = "R380" screenPixelsWidth = "310" screenPixelsHeight = "100" screenCharactersHeight = "7" screenBitDepth = "1" isColor = "false" maximumRenderedPageSize = "3000" isMobileDevice="true" 除了其中的 “M3Gate“其他的都是拷贝过来的,测试运行,OK. 那我怎么知道是 M3Gate/0.6 呢?我是建立了一个日志文件,在 page_load 事件中就进行纪录,通过文件的 纪录获取得到我测试用的 M3Gate 的 User_aAgent。代码如洗: private void _logHTTPHeader() { FileStream fs=new FileStream ("F:\\WUTemp\\Log.log",FileMode.OpenOrCreate ,FileAccess.Write ); StreamWriter ws=new StreamWriter(fs); ws.WriteLine(DateTime.Now.ToShortTimeString () + Request.UserAgent +" "+Request.UserAgent ); ws.Flush(); ws.Close (); }
平时下班等女朋友总是要等很长时间,想看书又没有带,只有玩手机游戏;GPRS 上网,好象很多内容都 是要付费的,就只有下载铃声,什么图片的,没劲!最好能用手机看看小说,网络上好象没有免费的 WAP 小说,办公室的小妹妹也想用手机看小说,看来只有自己做一个了。 都说 JAVA 是开发 WAP 的利器,不过 WAP 需要这个“码”转到那个“码”,真是麻烦,算了,看一下能 不能用 C#做一个 WAP 小站。 想来也很简单的,WAP 就是用 UTF8 编码嘛,好象还有什么 WML 之类的,WML 在网上查查资料,就和 XML 差不多,平时用 XML 也蛮多的,WML 也就简单了,C#直接可以设 RESPONSE 的编码的,看来有戏 了,先写一个“Hello 老婆“吧, //设置 ContentType 类型 Response.ContentType="text/vnd.wap.wml"; //设置编码 Response.ContentEncoding=System.Text.Encoding.UTF8; //以下是根据 WML 协议写的内容部份 WapContent="\r\n"; WapContent+="\r\n"; WapContent+="\r\n"; WapContent+="\r\n"; WapContent+="

hello 老婆

\r\n"; WapContent+="
\r\n"; WapContent+="\r\n"; WapContent+="
\r\n"; WapContent+="\r\n"; Response.Write(WapContent); 用手机试一下,OK
现在写小说的 WAP 程序。 先从网上下一篇小说,存在目录下,1.txt 不过小说太大了,必须先要有一个目录,按 2K 分页吧,好家伙,有 200 页,算了,来一个直接选页数的 G O 吧: WapContent+=" "; WapContent+="\n"; WapContent+="\n"; WapContent+="\n"; WapContent+="就看这页!
\n"; WapContent+="
\n"; 所有的代码: private void Page_Load(object sender, System.EventArgs e) { string WapContent; string mC; //在调试时用 GB2312 模拟器 Response.ContentType="text/vnd.wap.wml"; // Response.ContentType="text/vnd.wap.wml;charset=UTF-8"; Response.ContentEncoding=System.Text.Encoding.UTF8;// Unicode ;// "UTF8"; // Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312"); int n=0; if(Request["Page"]==null) { //显示目录
WapContent="\r\n"; // WapContent="\r\n"; WapContent+="\r\n"; WapContent+="\r\n"; System.IO.FileInfo oFM=new System.IO.FileInfo(Request.PhysicalPath); System.IO.StreamReader oReaderD=new System.IO.StreamReader(oFM.DirectoryName +"\\"+ "1.txt",System. Text.Encoding.Default); //每次读 3000 字 mC=oReaderD.ReadToEnd() ; oReaderD.Close(); WapContent+="\r\n"; int k=mC.Length/3000; WapContent+="

目录

\r\n"; WapContent+="

共:"+k.ToString()+"页

\r\n"; WapContent+=" "; WapContent+="\n"; WapContent+="\n"; WapContent+="\n"; WapContent+="就看这页!
\n";
WapContent+="\n"; WapContent+="\r\n"; WapContent+=" \r\n"; WapContent+=" \r\n"; WapContent+="\r\n"; WapContent+="\r\n"; WapContent+="\r\n"; WapContent+="\r\n"; Response.Write(WapContent); return; } else n=System.Convert.ToInt32(Request["Page"]);
WapContent="\r\n"; WapContent+="\r\n"; WapContent+="\r\n"; System.IO.FileInfo oF=new System.IO.FileInfo(Request.PhysicalPath); System.IO.StreamReader oReader=new System.IO.StreamReader(oF.DirectoryName +"\\"+ "1.txt",System.Tex t.Encoding.Default); //每次讯读 3000 字 mC=oReader.ReadToEnd() ; oReader.Close(); if(mC.Length>4000) { mC=mC.Substring((n)*3000,3000); mC=mC.Replace("\r\n","
"); ArtMore=true; } //每屏 3000 字 WapContent+="\r\n";
分享到:
收藏