在Silverlight开发基于http协议客户端连接器(二)
2010-09-02 17:43
363 查看
上一篇中我们能够通过自己的WebClientEx与web应用进行通讯,这样我们就能像js中使用ajax那样异步的通过xml或json等格式进行数据收发了。
不过每次都让人家new 一个WebClientEx对象,手动传URI不说,还要管理一个共享的CookieContainer就显得笨拙了。
好吧,我们提供Message基类和一个连接器的上下文类WebConnectorContext。
Message中包含一个消息号(MessageId),一个Parameters字典。另外一个CurrentParameterUrlPart属性,该属性会自动将当前的baseurl与parameters进行拼接,过滤无效参数然后返回一个完整的url。对于一个自定义消息可以从Message继承过来,设置一下有效参数即可。
WebConnecorContext对外只提供一个AddMessageToSend方法,在该方法中设置Message和回调即可。
WebConnectorContext
public class WebConnectorContext
{
private List<WebClientWrapper> _asyncTasks;
private string baseAddress;
public WebConnectorContext(string baseAddress)
{
this.baseAddress = baseAddress;
init();
}
private CookieContainer _cookie = new CookieContainer();
private object _cookieDataLocker = new object();
public CookieContainer AppCookie
{
get
{
lock (_cookieDataLocker)
{
return _cookie;
}
}
protected set
{
lock (_cookieDataLocker)
{
_cookie = value;
}
}
}
private void init()
{
_asyncTasks = new List<WebClientWrapper>();
}
public virtual void AddMessageToSend(Message msg, Action<WebClientWrapper, string> action)
{
var task = new WebClientWrapper()
{
Message = msg
};
task.DownloadStringCompleted += (s) => OnResultReceived(task, s, action);
_asyncTasks.Add(task);
task.SendAsync(baseAddress, AppCookie);
}
private void onResultReceived(WebClientWrapper task, string e, Action<WebClientWrapper, string> action)
{
if(action != null)
action(task, e);
_asyncTasks.Remove(task);
}
}
不过每次都让人家new 一个WebClientEx对象,手动传URI不说,还要管理一个共享的CookieContainer就显得笨拙了。
好吧,我们提供Message基类和一个连接器的上下文类WebConnectorContext。
Message中包含一个消息号(MessageId),一个Parameters字典。另外一个CurrentParameterUrlPart属性,该属性会自动将当前的baseurl与parameters进行拼接,过滤无效参数然后返回一个完整的url。对于一个自定义消息可以从Message继承过来,设置一下有效参数即可。
WebConnecorContext对外只提供一个AddMessageToSend方法,在该方法中设置Message和回调即可。
WebConnectorContext
public class WebConnectorContext
{
private List<WebClientWrapper> _asyncTasks;
private string baseAddress;
public WebConnectorContext(string baseAddress)
{
this.baseAddress = baseAddress;
init();
}
private CookieContainer _cookie = new CookieContainer();
private object _cookieDataLocker = new object();
public CookieContainer AppCookie
{
get
{
lock (_cookieDataLocker)
{
return _cookie;
}
}
protected set
{
lock (_cookieDataLocker)
{
_cookie = value;
}
}
}
private void init()
{
_asyncTasks = new List<WebClientWrapper>();
}
public virtual void AddMessageToSend(Message msg, Action<WebClientWrapper, string> action)
{
var task = new WebClientWrapper()
{
Message = msg
};
task.DownloadStringCompleted += (s) => OnResultReceived(task, s, action);
_asyncTasks.Add(task);
task.SendAsync(baseAddress, AppCookie);
}
private void onResultReceived(WebClientWrapper task, string e, Action<WebClientWrapper, string> action)
{
if(action != null)
action(task, e);
_asyncTasks.Remove(task);
}
}
相关文章推荐
- 在Silverlight开发基于http协议客户端连接器(一)
- 在Silverlight开发基于http协议客户端连接器(三)
- 基于ONVIF协议的(IPC)客户端程序开发-10 设备校时
- 如果是作为客户端的HTTP+JSON接口工程,没有JSP等view视图的情况下,使用Jersery框架开发绝对是第一选择。而在基于Spring3 MVC的架构下,对HTTP+JSON的返回类型也有很好
- 移动网络应用开发中,使用 HTTP 协议比起使用 socket 实现基于 TCP 的自定义协议有哪些优势?
- 基于ONVIF协议的(IPC)客户端程序开发-11 设备能力
- Tomcat基于Coyote的HTTP 1.1协议连接器
- 利用socket自己实现基于HTTP协议的Web客户端
- Tomcat基于Coyote的HTTP 1.1协议连接器
- HTTPSQS:基于HTTP协议的轻量级开源简单队列服务(安装php客户端)
- 基于ONVIF协议的(IPC)客户端程序开发-5:使用gSOAP生成ONVIF框架代码
- 简单介绍基于WEB开发的HTTP协议
- 关于基于HTTP协议的ios开发
- GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
- 简单介绍基于WEB开发的HTTP协议
- 使用EzHttp框架 开发基于HTTP协议的CS轻应用
- 基于NIO实现客户端通过HTTP协议访问WEB站点
- 基于ONVIF协议的(IPC)客户端程序开发-7:设备搜索
- 微服务框架Finagle介绍 Part2: 在Finagle中开发基于Http协议的应用
- iOS开发中大部分App的网络数据交换是基于HTTP协议的。本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法。