Silverlight_Rest_WCF系列之六:跨线程

简介:

跨线程有两种方法。

 1:this.Dispatcher.BeginInvoke

 2:SynchronizationContext

在上篇文章中我使用了第一种方法。显然每次都要调用this.Dispatcher.BeginInvoke是一件很“环照”的事情。

为了完善RestInvoke,我打算使用SynchronizationContext类,而SynchronizationContext类要和WebRequest关联。

为什么要和WebRequest关联呢?

因为一个Request对应了一个线程上下文,所以要保存请求时候的线程上下文,然后在成功获取数据后再调用保存的线程上下文来跨线程操作。

首先想到的是装饰模式,当然了,在这里可以用,但是从简单性角度考虑,就把Request和SynchronizationContext一起保存在HttpSyncWebRequest类中了。

复制代码
///   <summary>
    
///  同步HttpWebRequest
    
///   </summary>
     public   class  HttpSyncWebRequest
    {
        
public  HttpWebRequest HttpWebRequest {  get set ; }
        
public  SynchronizationContext SyncContext {  get set ; }
    }
复制代码

代码很简单就是保存一个HttpWebRequest 和SyncContext对象。

在RestInvoke中,我们要修改GetWebRequest方法。代码如下:

复制代码
///   <summary>
        
///  获取WebRequest对象
        
///   </summary>
        
///   <param name="requestUriString"> 请求的地址 </param>
        
///   <param name="httpMethod"> 请求的方法:GET,PUT,POST,DELETE </param>
        
///   <param name="contentType"> 请求的类型,json:"application/json" </param>
        
///   <returns></returns>
         public   static  HttpSyncWebRequest GetWebRequest( string  requestUriString,
                                                    
string  httpMethod,
                                                    
string  contentType)
        {
            HttpWebRequest request 
=  (HttpWebRequest)WebRequestCreator.ClientHttp.Create( new  Uri(requestUriString));
            request.Method 
=  httpMethod;

            
if  ( ! string .IsNullOrWhiteSpace(contentType))
            {
                request.ContentType 
=  contentType;
            }

            
return   new  HttpSyncWebRequest() { HttpWebRequest  =  request, SyncContext  =  SynchronizationContext.Current };
        }
复制代码

不是简单的返回HttpWebRequest对象,返回我们自定义的对象。

接着在每一个需要HttpWebRequest对象的地方使用

HttpSyncWebRequest syncWebRequest = GetWebRequest(requestUriString, httpMethod, "application/json;");

HttpWebRequest webRequest = syncWebRequest.HttpWebRequest;

 例如

 

View Code

 

View Code

 






本文转自LoveJenny博客园博客,原文链接:http://www.cnblogs.com/LoveJenny/archive/2011/05/16/2047116.html,如需转载请自行联系原作者
目录
相关文章
|
前端开发
WCF更新服务引用报错的原因之一
WCF更新服务引用报错的原因之一
|
C# 数据安全/隐私保护
c#如何创建WCF服务到发布(SqlServer版已经验证)
c#如何创建WCF服务到发布(SqlServer版已经验证)
71 0
|
安全 数据库连接 数据库
WCF服务创建到发布(SqlServer版)
在本示例开始之前,让我们先来了解一下什么是wcf? wcf有哪些特点? wcf是一个面向服务编程的综合分层架构。该架构的项层为服务模型层。 使用户用最少的时间和精力建立自己的软件产品和外界通信的模型。它使得开发者能够建立一个跨平台的安全、可信赖、事务性的解决方案。且能与已有系统兼容写作。 简单概括就是:一组数据通信的应用程序开发接口。
103 0
|
C++
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题
138 0
WCF基础教程(二)——解析iis8和iis8.5+VS2013发布wcf服务问题