WAP ASP.Net 開發筆記(一)

來源:互聯網
上載者:User

WAP ASP.Net 開發筆記(一)

配置了IIS,,建立了一個asp.net mobile工程,又加上了關於WML  MIME的映射條目,滿以為可以測試了,於是啟動M3Gate,但是失敗了,地到的資訊為:
“UTF-8格式不支援”類的錯誤,於是檢查web.config.的
<globalization
            requestEncoding="utf-8"
            responseEncoding="utf-8"
    />
修改為
<globalization
            requestEncoding="gb2312"
            responseEncoding="gb2312"
    />
再一次啟動IE,測試通過,但是M3Gate 再一次報錯:大致意思為:
對於Text/Html格式不支援。

思考,為什麼M3Gate得到html格式的響應而不是wml呢?翻閱資料,結合asp.net的WAP架構知道,原來,對於裝置,需要指定裝置的類型,明確通過設定檔告訴架構如何解釋asp.net的執行結果,這種執行可能解釋成HTML也可能解釋為WML,取決於裝置是否匹配。那裝置匹配是如何?的呢?主要是通過machine.cong檔案的或者web.config檔案的
<browserCaps> 節,通過HTTP_USER_AGENT 擷取裝置標示,只是架構獲得裝置的一些參數,從而在架構的配置下得到合適的wml檔案。
M3Gate不是標準的mobile裝置,所以架構不認識,預設狀況下按照html裝置輸出,導致上述錯誤。
解決辦法:讓架構知道M3Gate是一個裝置。

於是,尋找machine.config ,取出其中的一段,複製到web.config
<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="M3Gate/0.6" >
                    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"
                </case>
  
   </filter>
           
</browserCaps>

除了其中的 “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 ();

  }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.