SilverLight学习笔记--WebClient异步请求

2024-02-01 04:48

本文主要是介绍SilverLight学习笔记--WebClient异步请求,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在向特定 URI 发送 HTTP 请求时,基于 HTTP 的服务将返回数据。

 

HTTP 请求可以发送至各种 URI。此类 URI 包括 http://YouURL.com/service/getUserhttp://YouURL.com/service.svc/getUser 等,甚至包括静态数据,例如 http://YouURL.com/data.xml。配置 HTTP 请求通常使用表示检索的 GET 谓词,或者使用表示调用的 POST 谓词。被访问的服务可能要求随请求发送参数。对于 HTTP GET,参数通常附加在以下 URI 的结尾处:http://YouURL.com/service/getUser?id=123。对于 HTTP POST,所有参数都包括在 HTTP 请求的正文中。

 

 

 

编写HttpHandler

目的是模拟获取XML

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.Services;

using System.Text;

 

namespace SilverlightApplication9.Web

{

    /// <summary>

    /// $codebehindclassname$ 的摘要说明

    /// </summary>

    [WebService(Namespace = "http://tempuri.org/")]

    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

    public class Handler1 : IHttpHandler

    {

 

        public void ProcessRequest(HttpContext context)

        {

            string s ;

            s=@"<body IsMember='true'>

                  <form_LRB>

                    <YYSRBQ>3536456.98</YYSRBQ>

                    <YYCBBQ>456798.00</YYCBBQ>

                    <XSFYBQ>3456.00</XSFYBQ>

                    <YYLRBQ>255456.32</YYLRBQ>

                  </form_LRB>

                  <head>

                    <createTime>2008-12-10</createTime>

                    <form>

                      <formId>ADGH4368FDG3465</formId>

                      <instanceId>DG2H9J-DG22HG-ASF42F-55FFG</instanceId>

                    </form>

                  </head>

                  <base>

                    <NSRMC>东莞市愉达玻璃装饰工程有限公司</NSRMC>

                  </base>

                </body>";

            context.Response.ContentType = "text/plain";

            context.Response.Write(s);

        }

 

        public bool IsReusable

        {

            get

            {

               return false;

            }

        }

    }

}

使用 XmlReader获取数据

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using System.IO;

using System.Xml;

using System.Xml.Linq;

 

namespace SilverlightApplication9

{

    public partial class Page : UserControl

    {

        public Page()

        {

            InitializeComponent();

            RequestsToHttpServices();

        }

 

        public void RequestsToHttpServices()

        {

            Uri serviceUri = new Uri("http://localhost:2584/Handler1.ashx");

            //这里也可以使用静态数据

            //Uri serviceUri = new Uri("http://localhost:2584/XMLFile1.xml");

            WebClient downloader = new WebClient();

            downloader.OpenReadCompleted += new OpenReadCompletedEventHandler(downloader_OpenReadCompleted);

            downloader.OpenReadAsync(serviceUri);

        }

 

        void downloader_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)

        {

            if (e.Error == null)

            {

                Stream responseStream = e.Result;

 

                XmlReader responseReader = XmlReader.Create(responseStream);

 

 

                responseReader.ReadToFollowing("YYSRBQ");

                decimal YYSRBQ = responseReader.ReadElementContentAsDecimal();

                responseReader.ReadToFollowing("YYCBBQ");

                decimal YYCBBQ = responseReader.ReadElementContentAsDecimal();

                responseReader.ReadToFollowing("YYLRBQ");

                decimal YYLRBQ = responseReader.ReadElementContentAsDecimal();

                responseReader.ReadToFollowing("instanceId");

                string instanceId= responseReader.ReadInnerXml();

                responseReader.ReadToFollowing("NSRMC");

                string name = responseReader.ReadInnerXml();

 

                OutputText.Text = "表单实例:" + instanceId + ""n" + name + ""n营业收入:" + YYSRBQ + ""n营业成本:" + YYCBBQ + ""n营业利润:" + YYLRBQ;

 

            }

        }

    }

}

 

使用 JSON 数据

stream 类型的 responseStream 对象中返回了下列 JSON:

 

{"IsMember" : true, "Name" : "John", "Age" : 24}

 

使用 DataContractJsonSerializer

 

public class User

{

    public bool IsMember { get; set; }

    public string Name { get; set; }

    public int Age { get; set; }

}

 

responseStream 反序列化为 User 对象

 

DataContractJsonSerializer serializer =

    new DataContractJsonSerializer(typeof(User));

User user = (User)serializer.ReadObject(responseStream);

 

bool isMember = user.IsMember;

string name = user.Name;

int age = user.Age;

 

使用 JsonObject LINQ

Silverlight 提供了 jsonprimitivejsonarray jsonobject 类型,这些类型允许您以弱类型方式处理 JSON。此方法允许您动态地访问基元 JSON 类型(stringnumberBoolean)的值,并索引为结构化 JSON 类型(object array),而不需要预定义反序列化的目标类型(例如 User 类型)。下列代码演示如何执行此操作。

 

 

JsonObject user = (JsonObject)JsonObject.Load(responseStream);

bool isMember = user["IsMember"];

string name = user["Name"];

int age = user["Age"];

 

 

 

使用 JsonObject LINQ 可以方便地处理复杂的 JSON 对象。例如,假定在 Stream 类型的 responseStream 对象中包含下列 JSON

 

 

[{"IsMember" : true, "Name" : "John", "Age" : 24},

{"IsMember" : false, "Name" : "Paul", "Age" : 44},

{"IsMember" : true, "Name" : "George", "Age" : 12}]

 

 

 

若要检索作为成员的所有人员,请对 JsonArray 对象使用以下 LINQ 查询。

 

JsonArray users = (JsonArray)JsonArray.Load(responseStream);

 

var members = from member in users

              where member["IsMember"]

              select member;

 

foreach (JsonObject member in members)

{

   string name = member["Name"];

   int age = member["Age"];

 

   // Do something...

 

}

 

这篇关于SilverLight学习笔记--WebClient异步请求的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/666128

相关文章

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须