上接稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSSATOM格式的数据

上接稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSSATOM格式的数据,第1张

概述2、调用 REST 服务,返回 XML 数据 REST.cs(WCF创建的REST服务) using System; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Activation; using System.ServiceM 2、调用 REST 服务,返回 XML 数据
REST.cs(WCF创建的REST服务)

using System;

using System.linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.ServiceModel.Activation;


using System.ServiceModel.Web;

using System.Collections.Generic;

using System.Text;

using System.IO;


/// <summary>
/// 提供 REST 服务的类
/// 注:Silverlight只支持 GET 和 POST
/// </summary>

[ServiceContract]

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

public class REST

{

         /// <summary>

         /// 用于演示返回 XML(对象) 的 REST 服务

         /// </summary>

         /// <param name="name"></param>

         /// <returns></returns>

        [OperationContract]

        [WebGet(UriTemplate = "User/{name}/xml",ResponseFormat = Webmessageformat.Xml)]

         public User HelloXml( string name)

        {

                 return new User { name = name,DayOfBirth = new DateTime(1980,2,14) };

        }


         /// <summary>

         /// 用于演示返回 XML(集合) 的 REST 服务

         /// </summary>

         /// <returns></returns>

        [OperationContract]

        [WebGet(UriTemplate = "Users/xml",ResponseFormat = Webmessageformat.Xml)]

         public List<User> HelloXml2()

        {

                 return new List<User>    

                {    

                         new User(){ name = "webabcd01",1,1) },

                         new User(){ name = "webabcd02",2) },

                         new User(){ name = "webabcd03",3,3) },

                };

        }

}
  Xml.xaml
<UserControl x:Class="Silverlight20.Communication.Xml"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <StackPanel HorizontalAlignment="left" WIDth="600">

                <TextBox x:name="txtMsgXml" margin="5" />
                <TextBox x:name="txtMsgXml2" margin="5" />

        </StackPanel>
</UserControl>   Xml.xaml.cs

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.Xml.linq;

using System.IO;


namespace Silverlight20.Communication

{

         public partial class Xml : UserControl

        {

                 public Xml()

                {

                        InitializeComponent();


                         // 演示如何处理 XML(对象)

                        XmlDemo();


                         // 演示如何处理 XML(集合)

                        XmlDemo2();

                }


                 /// <summary>

                 /// 演示如何处理 XML(对象)

                 /// </summary>

                 voID XmlDemo()

                {

                         // REST 服务的 URL

                        Uri uri = new Uri( "http://localhost:3036/REST.svc/User/webabcd/xml",UriKind.absolute);


                        // 实例化 WebClIEnt

                        System.Net.WebClIEnt clIEnt = new System.Net.WebClIEnt();


                        clIEnt.DownloadStringCompleted += new DownloadStringCompletedEventHandler(xml_DownloadStringCompleted);

                        clIEnt.DownloadStringAsync(uri);


                        txtMsgXml.Text = "读取 XML(对象) 数据中。。。";

                }


                voID xml_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e)

                {

                        if (e.Error != null)

                        {

                                // 发生错误的话,则打印出来

                                txtMsgXml.Text = e.Error.ToString();

                                return;

                        }


                        // 将获得的字符串转换为 XML(对象)

                        var buffer = System.Text.EnCoding.UTF8.GetBytes(e.Result);

                        var ms = new MemoryStream(buffer);


                        XElement xmlObject = XElement.Load(ms);


                        txtMsgXml.Text = e.Result + "\r\n";

                        Xnamespace ns = "http://webabcd.cnblogs.com/";

                        txtMsgXml.Text += string.Format("姓名: {0},生日: {1}",

                                (string)xmlObject.Element(ns + "name"),

                                ((DateTime)xmlObject.Element(ns + "DayOfBirth")).ToString("yyyy-MM-dd"));


                        /*    

                         * 总结:

                         * XElement - 表示一个 XML 元素

                         *         XElement.Element - XML 元素内的 XML 元素

                         *         XElement.Attribute - XML 元素内的 XML 属性

                         *         XElement.Load(Stream) - 使用指定流创建一个 XElement 对象

                         *         XElement.Parse(String) - 解析指定的 XML 字符串为一个 XElement 对象

                         * XAttribute - 表示一个 XML 属性

                         */

                }


                /// <summary>

                /// 演示如何处理 XML(集合)

                /// </summary>

                voID XmlDemo2()

                {

                        // REST 服务的 URL

                        Uri uri = new Uri("http://localhost:3036/REST.svc/Users/xml",UriKind.absolute);


                        // 实例化 WebClIEnt

                        System.Net.WebClIEnt clIEnt = new System.Net.WebClIEnt();


                        clIEnt.DownloadStringCompleted += new DownloadStringCompletedEventHandler(xml2_DownloadStringCompleted);

                        clIEnt.DownloadStringAsync(uri);


                        txtMsgXml2.Text = "读取 XML(集合) 数据中。。。";

                }


                voID xml2_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e)

                {

                        if (e.Error != null)

                        {

                                // 发生错误的话,则打印出来

                                txtMsgXml2.Text = e.Error.ToString();

                                return;

                        }


                        // 将获得的字符串转换为 XML(集合)

                        Xdocument xmlObject = Xdocument.Parse(e.Result);


                        txtMsgXml2.Text = e.Result + "\r\n";

                        Xnamespace ns = "http://webabcd.cnblogs.com/";

                        var obj = from p in xmlObject.Elements(ns + "ArrayOfUser").Elements(ns + "User")

                                            where p.Element(ns + "name").Value == "webabcd02"

                                            select new { name = (string)p.Element(ns + "name"),DayOfBirth = (DateTime)p.Element(ns + "DayOfBirth") };

                        

                        txtMsgXml2.Text += string.Format("姓名: {0},

                                obj.First().name,

                                obj.First().DayOfBirth.ToString("yyyy-MM-dd"));



                        /*    

                         * 总结:

                         * liNQ to XML 相当的方便

                         */

                }

        }

}     3、调用 REST 服务,返回 RSS/Atom 数据
Proxy.aspx.cs(返回指定的URL地址的内容的服务)

using System;

using System.Collections.Generic;

using System.linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;


public partial class Proxy : System.Web.UI.Page

{

         protected voID Page_Load( object sender,EventArgs e)

        {

                 // 获取某个 url 地址的 HTML 并在页面上输出


                 string url = Request.queryString[ "url"];


                System.Net.WebClIEnt clIEnt = new System.Net.WebClIEnt();

                clIEnt.EnCoding = System.Text.EnCoding.UTF8;


                Response.Write(clIEnt.DownloadString(url));

                Response.End();

        }

}   RSSAtom.xaml
<UserControl x:Class="Silverlight20.Communication.RSSAtom"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <StackPanel HorizontalAlignment="left" >

                <TextBox x:name="txtMsgRSS" WIDth="600" margin="5" />

                <StackPanel OrIEntation="Horizontal">
                
                        <ListBox x:name="List" WIDth="300" margin="5" SelectionChanged="List_SelectionChanged">
                                <ListBox.ItemTemplate>
                                        <DataTemplate>
                                                <TextBlock Text="{Binding Title.Text}"></TextBlock>
                                        </DataTemplate>
                                </ListBox.ItemTemplate>
                        </ListBox>

                        <TextBlock x:name="detail" WIDth="300" margin="5" Text="{Binding Summary.Text}" textwrapPing="Wrap" />
                        
                </StackPanel>
                
        </StackPanel>
</UserControl>   RSSAtom.xaml.cs

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.Xml;

using System.IO;

using System.ServiceModel.Syndication;


namespace Silverlight20.Communication

{

         public partial class RSSAtom : UserControl

        {

                 public RSSAtom()

                {

                        InitializeComponent();


                         // 演示如何处理 RSS/Atom

                        RSSDemo();

                }


                 /// <summary>

                 /// 演示如何处理 RSS/Atom

                 /// </summary>

                 voID RSSDemo()

                {

                         // 让一个代理页面去请求相关的 RSS/Atom(如果用Silverlight直接去请求,则需要在目标域的根目录下配置策略文件)

                        Uri uri = new Uri( "http://localhost:3036/Proxy.aspx?url=http://webabcd.cnblogs.com/RSS",UriKind.absolute);


                        // 实例化 WebClIEnt

                        System.Net.WebClIEnt clIEnt = new System.Net.WebClIEnt();


                        clIEnt.DownloadStringCompleted += new DownloadStringCompletedEventHandler(RSS_DownloadStringCompleted);

                        clIEnt.DownloadStringAsync(uri);


                        txtMsgRSS.Text = "读取 RSS 数据中。。。";

                }


                voID RSS_DownloadStringCompleted(object sender,DownloadStringCompletedEventArgs e)

                {

                        if (e.Error != null)

                        {

                                // 发生错误的话,则打印出来

                                txtMsgRSS.Text = e.Error.ToString();

                                return;

                        }


                        // 将获得的字符串转换为 XmlReader

                        var buffer = System.Text.EnCoding.UTF8.GetBytes(e.Result);

                        var ms = new MemoryStream(buffer);

                        XmlReader reader = XmlReader.Create(ms);


                        // 从指定的 XmlReader 中加载,以生成 SyndicationFeed

                        SyndicationFeed Feed = SyndicationFeed.Load(reader);


                        // 设置 List 的数据源为 RSS/Atom 的项集合(SyndicationFeed.Items)

                        List.ItemsSource = Feed.Items;

                        txtMsgRSS.Text = e.Result + "\r\n";

                }


                private voID List_SelectionChanged(object sender,SelectionChangedEventArgs e)

                {

                        // 设置 detail 的数据上下文为 RSS/Atom 的指定项(SyndicationItem)

                        detail.DataContext = List.SelectedItem as SyndicationItem;

                }

        }

}  
OK
[源码下载]
总结

以上是内存溢出为你收集整理的上接稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据全部内容,希望文章能够帮你解决上接稳扎稳打Silverlight(19) - 2.0通信之调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1052434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存