RyanDing

用编码抒写未来

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  41 Posts :: 0 Stories :: 1243 Comments :: 0 Trackbacks

WinCE winform 开发注意事项
环境
client:Microsoft wince5/wince6 .net compact framework3.5
server:iis7.5 Microsoft MVC3

编写目的
本篇主要描述wince下的.net winform开发,以及开发注意事项。

注意事项
1.HttpWebRequest
在.net compact framework 下不支持 CookieContainer,解决方案通过http header增加cookie来解决 登录session。示例代码如下:
var postData = Encoding.UTF8.GetBytes(postString);
// 设置提交的相关参数
_request = WebRequest.Create(uri) as HttpWebRequest;
_request.Method = "POST";

_request.AllowWriteStreamBuffering = false;

_request.KeepAlive = true;

_request.ContentType = "application/x-www-form-urlencoded";
_request.ContentLength = postData.Length;
if (!string.IsNullOrEmpty(_cookie))// 登录后每次请求服务端在http header 上带入 session.
_request.Headers.Add("Cookie", _cookie);

// 提交请求数据
_outputStream = _request.GetRequestStream();
_outputStream.Write(postData, 0, postData.Length);
_outputStream.Close();

// 接收返回的页面
_response = _request.GetResponse() as HttpWebResponse;
_responseStream = _response.GetResponseStream();
_reader = new System.IO.StreamReader(_responseStream, Encoding.UTF8);
_srcString = _reader.ReadToEnd();
string statusCode = _response.StatusCode.ToString();

string tmpCookie = _response.Headers.Get("Set-Cookie");
string applicationName = AppConfig.GetConfigValue("ApplicationName");
if (tmpCookie.Contains(applicationName))//得到form登录后的 set-cookie
_cookie = _response.Headers.Get("Set-Cookie");
_reader.Close();
_response.Close();
return _srcString;

2. 对https请求
https通过ssl一个加密压缩的安全协议。在.net compact framwork 环境下我们默认通过HttpWebRequest是无法获正常获取
https请求的,程序会报Could not establish secure channel for SSL/TLS。.netframework 解决方案不适用于.net compact framework。示例代码如下:

定义相关类:
public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy
{

public TrustAllCertificatePolicy()

{ }

public bool CheckValidationResult(ServicePoint sp,

X509Certificate cert, WebRequest req, int problem)
{

return true;

}
}
调用:
public static string HttpPostMethod(string uri, string postString)
{
//信任https安全证书
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy();

var postData = Encoding.UTF8.GetBytes(postString);
_request = WebRequest.Create(uri) as HttpWebRequest;
_request.Method = "POST";
_request.AllowWriteStreamBuffering = false;

3.HttpWebRequest 异步请求
在.net compact framework 下我们可以通过HttpWebRequest进行异步请求,比如我们在下载服务器上大文件有一定的帮助。
示例代码如下:
private HttpWebRequest m_req;
m_req = (HttpWebRequest)HttpWebRequest.Create(string.Format(@"{0}/{1}", domainApp, m_UpgraderFilePath));
//ResponseReceived 为异步委托方法。
m_req.BeginGetResponse(new AsyncCallback(ResponseReceived), null);

4. 其他

在.net framework copmact 下读取文本文件、读取.config文件、读取ini文件,均需要自己手动实现。具体代码略。

注:

上文中未提及ASP.NET MVC3内容,在本例中MVC3只是作为后台的服务,每个服务端JsonResult方法只是做为http接口。
使用 http 协议而不用 soap(webservice/ wcf) 协议,就微软的技术来讲是个未来的趋势。由于项目开发周期的原因,未将Web API 引入。
在由wince client端使用 .net 大名鼎鼎的开源类库 .Newtonsoft.Json.Compact 将json数据转成相应C#实体。

posted on 2012-05-31 09:44 ryanding 阅读(...) 评论(...) 编辑 收藏