一、什么是WebClient类
   1、基本知识
    WebClient类是Mircsoft在.NET框架下提供的向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法。通过这个类,大家可以在脱离浏览器的基础上模拟浏览器对互联网上的资源的访问和发送信息。它使人们使用起来更加简单方便,然而它也有先天不足的地方。那就是缺少对cookies/session的支持。
    WebClient类为Silverlight插件提供了一整套的HTTP客户端功能,可以下载应用程序数据,比如XAML内容,附加的程序集或者视频图片等媒体文件。WebClient可以根据程序须要即时下载内容,可以异步呈现和使用下载的内容,而不是随HTML页面一起下载。
    WebClient类提供了发起请求、监视请求的进度以及检索下载内容、上传数据到指定资源等功能。在Silverlight 2中,只能使用WebClient发起异步的请求,如开发一个视频播放应用程序,在应用程序加载时,选择开始请求每一部影片,使其加载到浏览器缓存中,这样可以避免缓冲延迟。
   由于WebClient请求都是异步的,使用的是基于异步事件编程模型,大部分交互操作都是依靠事件处理来完成的,通常须要定义如下一个或者多个事件处理函数。

2、相关方法
将数据上载到资源的 WebClient 方法

OpenWriteAsync: 检索 Stream,它在不阻止调用线程的情况下以异步方式将数据发送到资源。
UploadStringAsync: 在不阻止调用线程的情况下,将 String 发送到资源。

从资源下载数据的 WebClient 方法

DownloadStringAsync: 在不阻止调用线程的情况下,从资源下载 String。
OpenReadAsync : 在不阻止调用线程的情况下,以异步方式从资源返回数据。

您可以使用 CancelAsync 方法取消尚未完成的异步操作。

 3、两种工作方式:
   A、以字符串形式下载和上传数据
  使用WebClient可以以字符串形式下载数据,当请求一个指定地址的字符串时,调用DownloadStringAsync方法,操作完成后将触发DownloadStringCompleted事件,在该事件处理方法中能够接收到一个类型为DownloadStringCompletedEventArgs的参数,它的Result属性的类型为String,我们可以通过该属性来获得最终的字符串结果,它可以是一段普通的文本或一段XML文本等。

 B、 以流形式下载和上传数据
  使用WebClient同样可以以流形式下载数据,当请求下载的资源是一个流时,可调用OpenReadAsync方法,此操作完成后将触发OpenReadCompleted事件,在该事件处理方法中能够接收到一个类型为OpenReadCompletedEventArgs的参数,它的Result属性类型为Stream,使用此属性能够获取到最终的流结果。

 二、示例如何实现通讯 (以字符串形式下载和上传数据)

新建Silverlight应用程序SLWebClient。如下图:


编写界面布局,XAML如下:

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

界面如下图:
                        

      在客户端,我们要完成两段代码:

    i、向服务器端发出"下载字符串"请求,相关代码如下:

ii、向服务器端发出"上传字符串"请求,相关代码如下:


        #region   以字符串形式上传信息

        private void btnUploadText_Click(object sender, RoutedEventArgs e)
        {
            // 要上传的文本数据
            string data = this.txtBxUploadStr.Text.ToString();             Uri endpoint = new Uri("http://localhost:49417/WebClientUpLoadHandler.ashx");             WebClient client = new WebClient();
            client.UploadStringCompleted +=
            new UploadStringCompletedEventHandler(client_UploadStringCompleted);
            client.UploadStringAsync(endpoint, "POST", data);
        }         void client_UploadStringCompleted(object sender,UploadStringCompletedEventArgs e)
        {
           MessageBox.Show(e.Result);
        }
        #endregion


Page.xaml.cs全部代码如下:

在服务器端,我们要建立两个Handler

  WebClientDownHandler.ashx :处理客户端的下载请求.
  WebClientUpLoadHandler.ashx :处理客户端的上传请求

WebClientDownHandler.ashx --负责处理下载字符串请求的Handler代码如下:

WebClientUpLoadHandler.ashx--负责处理上传字符串请求的Handler代码如下:

生成应用程序并运行,运行效果如下:

SilverLight学习笔记--使用WebClient实现通讯(一)(上传和下载字符串数据)的更多相关文章

  1. 从.Net到Java学习第十篇——Spring Boot文件上传和下载

    从.Net到Java学习系列目录 图片上传 Spring Boot中的文件上传就是Spring MVC中的文件上传,将其集成进来了. 在模板目录创建一个新的页面 profile/uploadPage. ...

  2. Web 在线文件管理器学习笔记与总结(19)上传文件

    dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...

  3. JSP学习笔记(四):文件上传

    JSP 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图像文件或任何文档.我们使用 Servlet 来处理文件上传,使用到的文件有: upload.j ...

  4. Android学习笔记_43_网络通信之文件断点上传

    1.建立服务端,用于接收上传的文件.这里使用Socket,文件可能会比较大.采用多线程编程,防止并发. package com.socket.service; import java.io.File; ...

  5. Android学习笔记_13_网络通信之多个上传文件

    一.获取HTTP协议: 建立一个Web项目,建立一个如下所示的jsp界面,用IE捕获表单提交信息. <%@ page language="java" contentType= ...

  6. CodeIgniter学习笔记五:分页,文件上传,session,验证码

    一.分页 示例代码: //装载类文件 $this -> load -> library('pagination'); $controller = $this->router-> ...

  7. AntDesign vue学习笔记(九)自定义文件上传

    第七节时提到,上传文件时实际可能需要传输一个token. 1.查看vue antdesign文档https://vue.ant.design/components/upload-cn/ 2.使用cus ...

  8. java web学习总结(二十四) -------------------Servlet文件上传和下载的实现

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  9. JavaWeb学习记录(二十三)——文件上传与下载

    一.导入jar包

随机推荐

  1. JSOI 2017 退役记

    意料之中,真的要退役了. 懒得写游记了. Round 2 的时候状态一直不太清醒,最后混了个rank19,准备AFO吧.

  2. 进度条算法 progressBar

    ; ;var maxNum=int.MaxValue; progressBar.Maximum =maxNum; progressBar.Minimum = ; progressBar.Value = ...

  3. PlantUML——1.Hello

    官网: http://www.plantuml.com/ 第一步: 下载 plantuml.jar文件: 第二步:创建一个demo.txt文件(与plantuml.jar在同一目录),内容如下: @s ...

  4. Bootstrap开发模板

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  5. beego学习笔记(2)

    BEEGO的几个特点: 简单化 RESTful 支持.MVC 模型,可以使用 bee 工具快速地开发应用,包括监控代码修改进行热编译.自动化测试代码以及自动化打包部署. 智能化 支持智能路由.智能监控 ...

  6. hdu 1846(巴什博弈)

    Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  7. 【PAT】1012. 数字分类 (20)

    1012. 数字分类 (20) 给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字: A1 = 能被5整除的数字中所有偶数的和: A2 = 将被5除后余1的数字按给出顺序进行交错求和,即计算 ...

  8. CentOS 7中Nginx1.9.5编译安装教程systemctl启动

    先安装gcc 等 yum -y install gcc gcc-c++ wget 复制代码 .然后装一些库 yum -y install gcc wget automake autoconf libt ...

  9. 【转】VueJS中学习使用Vuex详解

    转自:https://segmentfault.com/a/1190000015782272   在SPA单页面组件的开发中 Vue的vuex和React的Redux 都统称为同一状态管理,个人的理解 ...

  10. json调试

    private static void mockapi(OkHttpClient.Builder httpClientBuilder) { if (Config.isMockApi) { MockAp ...