一、什么是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. 142.Linked List Cycle II---双指针

    题目链接 题目大意:141题目的扩展,给出单链表,判断是否有环,如果有环,找出环的开始的结点,如果没有环,返回null. 法一(借鉴):在已经找出单链表环的基础上再找开始结点,要时刻记住这个环不一定是 ...

  2. 使用xbee连接地面站和飞控

    Zigbee是一种短距离.低功耗的近距离无线组网通讯技术,主要适用于自动控制和远程控制领域,可以嵌入各种设备. DIGI的ZigBee产品XBee小型但却是一个功能完善的ZigBee收发器(即接收器/ ...

  3. 用PHP去实现数据库查询结果缓存

    有些时候我们希望减少对数据库的查询来提高程序的性能,因为这些数据不是经常变更的,而是会在很长一段时间内都不会变化,因此,我们每连接一次数据库,都会把相应的结果用文件的形式保存起来.比如对于一个商城来说 ...

  4. linux -j 4

    把源码编译成可执行的二进制文件, 4为服务器内核数

  5. NTP详解-转

    网管实战:Linux时间服务器配置 [IT168 专稿]目前计算机网络中各主机和服务器等网络设备的时间基本处于无序的状态.随着计算机网络应用的不断涌现,计算机的时间同步问题成为愈来愈重要的事情.以Un ...

  6. serial minicom

    这是一篇讲述串口很好的入门教程: http://users.ece.utexas.edu/~valvano/Volume1/E-Book/C11_SerialInterface.htm 如何显示串口数 ...

  7. numpy基础代码操练

    In [20]: b[0,:,1] Out[20]: array([1, 5, 9]) In [21]: b[0,:,1] Out[21]: array([1, 5, 9]) In [22]: b[0 ...

  8. Java学习(final、static关键词)

    final关键词 概念:final的意思为最终,不可变.final是个修饰符,它可以用来修饰类,类的成员,以及局部变量.不能修饰构造方法. 特点: 1.final修饰的类不可以被继承,但可以继承别的类 ...

  9. Windows下 Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow

    Tensorflow 需要 Python 3.5/3.6  64bit 版本: 具体的安装方式可查看:https://www.tensorflow.org/install/install_window ...

  10. 06 java 基础:java 循环 递归

    1 递归实现 1 + 2 +3 +4 +5 + .... +100 public static int addSum(int num){ if(num == 1) return 1; return n ...