用.net开发wap

 

WAP应用程序结构

首先你拥有一个Web应用,那么集成WAP服务就相当容易。
你不必为原来的业务逻辑进行重新构建,而且如果你Web本身的应用就有分层的,那么扩展到WAP是很方便的。
对于我们目前的应用,我们可以简单的认为是WEB应用的Mobile迁移。更多的是在UI/UE上的调整。

WAP采用什么标准

1.XHTML Mobile 1.0(WAP2.0)xmlhtml的结合)
Google Mobile
wap.taobao.com
3g.sina.com.cn

2.WML1.1无线标记语言,也是xmlhtml的结合
3g.qq.com
wap.kong.net
3g.sina.com.cn

对比了一些网站WAP开发。googleMobile应用都是基于XHTML Mobile1.0,也的确做的很优秀。其他很多WAP网站,都是支持WML1.1 XHTML Mobile 双标准的。

采用.NET的封装控件,还是自定义WML标签

.NET中封装了一套移动开发组件。很遗憾在VS2008找不到Mobile开发模板(但支持Mobile开发).NET中的移动开发控件,会根据相应的设备显示不同解析标准。比如发现是PIE访问,.NET自动返回的是XHTML Mobile1.0的标签,而如果是其他的(根据具体设置)可以返回WML的标签。这样的好处是自动根据设备的支持显示对应的标签。从开发的效率和容易度来说,这样是最方便的。但从WAP站点的适应需求上,可控性自然就下降了。所以最后还是选择了传统的输出WML的方式进行处理。当然.NET也可以采用强 制输出WML的移动方式。请参考这篇文章:
asp.net强制输出WML
http://www.aspxclub.com/ContentView/4194/index.aspx

WAP的Session问题

Session问题主要原因还是因为Cookie问题,如果一台设备不支持Cookie那么其实Session也是无法使用的。因为Server端最终还 是需要知道,客户端到底请求的是那一个SessionID。从目前的Web程序中,我们也可以看到,这个SessionID,其实就存储在Cookie 中,ASP.NET2.0默认存储的是ASP.NET_SessionId。这里要注意的是,如果用户没有使用过Session,在使用 SessionID时,其值是变化的。每刷新一次页面它就变化一次。
.NET
开发中MS考虑到客户端不支持Cookie的方式,MS通过在URL传递一个24位的值,来保存这个SessonID
.NET
中提供一种更加友好的URL方式。“AutoDetect”,ASP.NET2.0中会自动判断客户端是否支持Cookie,如果不支持,将在URL中记录SessionID。经过这样处理,SESSION问题就得到了很好的解决。

用户登录认证问题

手机如何让用户默认登陆。仿效了目前很多WAP网站都在采用的token方式。产生一个令牌,通过这个令牌进行登录。当然用户可以选择退出来清空这个令牌程序。

WAP计数统计

手机对Javascript支持不够,能采用的方式还是通过img的方式。虽然“图片显示”可能被手机禁用
期待google支持Mobile
目前个人感觉最好的还是
Yahoo统计
51.la
因为有图片统计,所以也可以使用

WAP的编码问题

1:程序开发的编码设置有关。包括WebConfig的设置、PageCode等都要统一编码方式
2
:手机客户端的编码有关。只能通过服务端对特定的编码,进行解码来获得。
具体可以参考我的下面的链接
WAP编码问题一?
WAP编码问题二

IP、手机号判断问题

手机号码被服务商屏蔽,所以大家就不要再Googlebaidu 如何在WAP下获取手机号码了。
因为WAP Getaway的问题,你无法确定IP是否可以用了做某些判断,比如城市。我们目前根据测试的结果,IP应该可以用来作为城市判断。

WAP用户习惯
1
:翻页问题(下一页、上一页的简单换位给用户带来方便)
2
Title问题(方便用户收藏,Mobile你不能让用户不断的点击和搜索)
3
URL保存状态(正因为Cookie的失效,如果你希望用户在下次还能进入同一个页面,请多关注URL

 

 

---------------------------------------------------------------------------------------------------------------------------------------

 

Net开发WAP20081001 星期三 16:28选择用ASP.NET开发,ASP.NET开发WAP站点,实在简单,就是一个移动控件的运用,根本不用懂WML语法.唯一不同的,就是一个ASPX文件可以支持多个FORM,不同FORM之间可以切换,

最后ASP.NET根据访问的设备,输出不同的内容,

如果用IE访问就输出HTML,手机访问,输出WML,

不过在开发过程中也遇到了很多问题,一些问题总结如下:

1.模拟器选择:

    WINWAP,

    M3Gate,

    UP.SDK4.0,(推荐)

    OPenWave 5.0 (测试时需要),

    OPenWave6.2, (IIS 6.0应用,IIS5.0可能显示,但会有问题)

     CheckCom WAPBrowser 3.2

模拟器问题:

     ASP.NET把一些常有的模拟器,的配制信息用正则表达式写在Machine.config

     在上述的模拟器中,我只有UP.SDK4.0,OPenWave 5.0,

他们只是一个公司的产品:

     需要下载,配制文件驱动更新:现在最新版本是:Device 4下载请到这里下载:

http://www.microsoft.com/downloads/details.aspx?FamilyId=02FA15FE-40D9-4DCE-9BB1-4DD61A5B7CCB&displaylang=en

但是,即使驱动更新以后,还是一些设备不能访问:

这时需要强制输出WML:

web.config

添加下面内容<system.web>

 

<browserCaps>

            <result type="System.Web.Mobile.MobileCapabilities, System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

            <use var="HTTP_USER_AGENT"/>

                     preferredRenderingType = "wml11"

                     preferredRenderingMime = "text/vnd.wap.wml"

                     preferredImageMime = "image/vnd.wap.wbmp"

</browserCaps>

如果定义相关其它属性可以完整的移动设置属性:

    <browserCaps>

            <result type="System.Web.Mobile.MobileCapabilities, System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

            <use var="HTTP_USER_AGENT"/>

 

             browser=Unknown

             version=0.0

             majorversion=0

             minorversion=0

             frames=false

             tables=false

             cookies=false

             backgroundsounds=false

             vbscript=false

             javascript=false

             javaapplets=false

             activexcontrols=false

             win16=false

             win32=false

             beta=false

             ak=false

             sk=false

             aol=false

             crawler=false

             cdf=false

             gold=false

             authenticodeupdate=false

             tagwriter=System.Web.UI.Html32TextWriter

             ecmascriptversion=0.0

             msdomversion=0.0

             w3cdomversion=0.0

             platform=Unknown

             css1=false

             css2=false

             xml=false

 

             mobileDeviceManufacturer = "Unknown"

             mobileDeviceModel = "Unknown"

 

             gatewayVersion = "None"

             gatewayMajorVersion = "0"

             gatewayMinorVersion = "0"

 

            preferredRenderingType = "wml11"

            preferredRenderingMime = "text/vnd.wap.wml"

            preferredImageMime = "image/vnd.wap.wbmp"

 

             defaultScreenCharactersWidth = "12"

             defaultScreenCharactersHeight = "6"

             defaultScreenPixelsWidth = "96"

             defaultScreenPixelsHeight = "72"

             defaultCharacterWidth = "8"

             defaultCharacterHeight = "12"

             screenBitDepth = "1"

             isColor = "false"

             inputType = "telephoneKeypad"

 

             numberOfSoftkeys = "0"

             maximumSoftkeyLabelLength = "5"

 

             canInitiateVoiceCall = "false"

 

             canSendMail = "true"

             hasBackButton = "true"

             rendersWmlDoAcceptsInline = "true"

             rendersWmlSelectsAsMenuCards = "true"

             rendersBreaksAfterWmlAnchor = "false"

             rendersBreaksAfterWmlInput = "false"

             rendersBreakBeforeWmlSelectAndInput = "true"

             requiresAttributeColonSubstitution = "true"

             requiresPhoneNumbersAsPlainText = "false"

             requiresUrlEncodedPostfieldValues = "false"

             requiredMetaTagNameValue = ""

             rendersBreaksAfterHtmlLists = "true"

             requiresUniqueHtmlCheckboxNames = "true"

             requiresUniqueHtmlInputNames = "true"

             requiresUniqueFilePathSuffix = "true"

             supportsCss = "false"

             hidesRightAlignedMultiselectScrollbars = "false"

             canRenderAfterInputOrSelectElement = "true"

             canRenderInputAndSelectElementsTogether = "true"

             canRenderOneventAndPrevElementsTogether = "true"

             canCombineFormsInDeck = "true"

             canRenderMixedSelects = "true"

             canRenderPostBackCards = "true"

             canRenderSetvarZeroWithMultiSelectionList = "true"

             supportsImageSubmit = "true"

             supportsSelectMultiple = "true"

             requiresHtmlAdaptiveErrorReporting = "false"

             requiresContentTypeMetaTag = "false"

             requiresDBCSCharacter = "false"

             requiresOutputOptimization = "false"

             supportsAccesskeyAttribute = "false"

             supportsInputIStyle = "false"

             supportsInputMode = "false"

             supportsIModeSymbols = "false"

             supportsJPhoneSymbols = "false"

             supportsJPhoneMultiMediaAttributes = "false"

             maximumRenderedPageSize = "2000"

             requiresSpecialViewStateEncoding = "false"

             requiresNoBreakInFormatting = "false"

             requiresLeadingPageBreak = "false"

             supportsQueryStringInFormAction = "true"

             supportsCacheControlMetaTag = "true"

             supportsUncheck = "true"

             canRenderEmptySelects = "true"

             supportsRedirectWithCookie = "true"

             supportsEmptyStringInCookieValue = "true"

             cachesAllResponsesWithExpires = "false"

             requiresNoSoftkeyLabels = "false"

             defaultSubmitButtonLimit = "1"

           

             supportsBold = "false"

             supportsItalic = "false"

             supportsFontSize = "false"

             supportsFontName = "false"

             supportsFontColor = "true"

             supportsBodyColor = "true"

             supportsDivAlign = "true"

             supportsDivNoWrap = "false"

             supportsCharacterEntityEncoding = "true"

 

             isMobileDevice="false"

</browserCaps>

 

具体属性的意思可以考试MSDN:设备功能列表

ms-help://MS.MSDNQTR.2003FEB.2052/mwsdk/html/mwlrfDeviceCapabilitiesTable.htm

 

但这样将给您在需要IE调试时带来很大的不便

下面代码将能解决IE和模拟器同时高度的问题(同样将下面代码加入system.web节点中)

 

    <browserCaps>

<result type="System.Web.Mobile.MobileCapabilities, System.Web.Mobile, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

<use var="HTTP_USER_AGENT"/>

<filter>

<case match="Unknown" with="%{browser}">

preferredRenderingType = "wml11"

preferredRenderingMime = "text/vnd.wap.wml"

preferredImageMime = "image/vnd.wap.wbmp"

type=Unknown

</case>

</filter>

</browserCaps>

 

2.链接:

在同一个aspx文件,使用Link控件的,#FORM来切换不同Form时在 OPenWave 5.0测试会出现错误!

建议在程序通过ActiveForm来做

3.乱码:

     如果在开发过程出现乱码,通过修改Web.Config

     <globalization

            requestEncoding="gb2312"

            responseEncoding="gb2312"

    />

4.取消移动设备缓存:

 

   Page.Response.Expires = -1;

    Response.CacheControl = "Public";

5.重定向

重定向通过

RedirectToMobilePage函数

不过使用过程中可能会出现一些问题

建议用Link控件来代替

 

   一些开发资料:

http://msdn.microsoft.com/mobility/downloads/sdks/default.aspx

 

http://www.dotnet247.com/247reference/__site/72

 

http://www.wapease.com

 

http://www.sp-forum.org/download/list.asp?type=14

 

http://www2.chn.monternet.com:8080/devdownload/DevWapSimulator.jsp

 

http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.aspnet.mobile/

 

 

 

 

 

 

vs2008开发wap网站()

首先新创建个项目,打开VS2008,新建个网站项目,我们添加新项时会发现以前在vs2003vs2005中的移动Web窗体项没有了,下图为vs20032005中的。

        vs2008中就没有移动Web窗体这一项,这是因为微软并未提供相应的模板。这确实很令人疑惑,百度了下网上的说法:据Microsoft-Visual Web Developer的团队项目经理Omar Khan的说法,这是因为Visual Studio 2008中的设计视图是基于一个全新的架构设计的所以暂时这一部分模板还没有跟上,所以ASP.NET mobile controls并不能显示。但是这多少也反映了微软是不是也在考虑今后(一方面也随着IEmobile的日趋成熟)可能将MobileWebSite的开发归并到ASP.NET Application中呢?
不过还好,Omar Khan同时也给出了他的团队开发的几个模板插件,用于在ASP.NET Web Site  ASP.NET Web Application的项目中 ,模板可以下载(点击下载)。 

        解压后先读各个文件夹下面的Readme.txt(其实就是说需要把他们铐到/My Documents/Visual Studio 2008/Templates/ItemTemplates下的两个文件夹下).有了这几个模板,在ASP.NET Web Site  ASP.NET Web Application的项目中再点击Add new Item即可看到相应的模板这样可以从我的模板里选择。如图: 

 

还有一点还是很遗憾的是,尽管有了模板,但是由于VS2008Designer架构进行了较大改进,微软的vs2008目前并不支持移动窗体的设计模式,该模板只能在Source code的模式下进行编辑,不能再设计模式下编辑。

接着我们就可以进行界面的搭建与代码的编写,与普通的Asp.net Web 页面没什么区别。

这是首页:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default2" %>
<%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile" %>
<html xmlns="
http://www.w3.org/1999/xhtml
" >
<body>
<mobile:Form id="Form1" runat="server" Title="
一线
">
<mobile:Image ID="Image1" Runat="server" ImageUrl="~/image/logo.gif"></mobile:Image>
<mobile:Link ID="Link1" Runat="server" BreakAfter="False" NavigateUrl="booklist.aspx">
快速找工作
</mobile:Link>
<mobile:Label ID="Label2" Runat="server" BreakAfter="False">||</mobile:Label>
<mobile:Link ID="Link4" Runat="server" BreakAfter="False" NavigateUrl="booklist.aspx">VIP
通道
</mobile:Link>
<mobile:Label ID="Label3" Runat="server" BreakAfter="False">||</mobile:Label>
<mobile:Link ID="Link2" Runat="server" BreakAfter="False" NavigateUrl="booklist.aspx">
注册会员
</mobile:Link>
<mobile:Label ID="Label4" Runat="server" BreakAfter="False">||</mobile:Label>
<mobile:Link ID="Link3" Runat="server" BreakAfter="True" NavigateUrl="booklist.aspx">
登陆
</mobile:Link>
<mobile:Label ID="Label25" Runat="server" ForeColor="Red" Wrapping="Wrap">
本站资源所有免费
!</mobile:Label>
        <mobile:Label ID="Label16" Runat="server" Wrapping="Wrap">
版权所有:一线人才
</mobile:Label>
        <mobile:Label ID="Label15" Runat="server">www.ywle.com</mobile:Label>

</mobile:Form>
</body>
</html>

代码完成后,就可以通过模拟设备进行调试了。从vs2008工具”-“设备仿真管理器中选择一款模拟器,右键选择连接,等模拟器运行后,再右键选择插入底座,就会与ActiveSync连接。忘了说,系统需要先安装微软的ActiveSync,这是用来连接计算机与移动设备的软件。现在的版本是4.5。下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=cabdb564-ae94-4c02-abbc-cdece61231d4&DisplayLang=zh-cn

ActiveSync会自动同步移动设备与计算机

 

 

如果一切正常,就可以在模拟器里看到编写的页面了。

 

下面是登陆的cs代码

 

 

 

最后强调个比较重要的地方,这只是在虚拟器中访问,输出的都是html代码,要在手机上访问就需要强制输出wml,将会详细介绍。[url]http://www.cnblogs.com/3stones/archive/2008/12/10/1351971.html[/url]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值