介绍
Silverlight 2.0 调用REST服务,处理JSON格式, XML格式, RSS/ATOM格式的数据
通过 System.Net.WebClient 类调用 REST 服务
通过 System.Json 命名控件下的类处理 JSON 数据
通过 System.Xml.Linq 命名空间下的类(LINQ to XML)处理 XML 数据
通过 System.ServiceModel.Syndication 命名空间下的类处理 RSS/ATOM 数据
示例
1、调用 REST 服务,返回 JSON 数据
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>
/// 用于演示返回 JSON(对象) 的 REST 服务
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[OperationContract]
[WebGet(UriTemplate = " User/{name}/json ", ResponseFormat = WebMessageFormat.Json)]
public User HelloJson( string name)
{
return new User { Name = name, DayOfBirth = new DateTime( 1980, 2, 14) };
}
/**/ /// <summary>
/// 用于演示返回 JSON(集合) 的 REST 服务
/// </summary>
/// <returns></returns>
[OperationContract]
[WebGet(UriTemplate = " Users/json ", ResponseFormat = WebMessageFormat.Json)]
public List<User> HelloJson2()
{
return new List<User>
{
new User(){ Name = " webabcd01 ", DayOfBirth = new DateTime( 1980, 1, 1) },
new User(){ Name = " webabcd02 ", DayOfBirth = new DateTime( 1980, 2, 2) },
new User(){ Name = " webabcd03 ", DayOfBirth = new DateTime( 1980, 3, 3) },
};
}
}
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>
/// 用于演示返回 JSON(对象) 的 REST 服务
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[OperationContract]
[WebGet(UriTemplate = " User/{name}/json ", ResponseFormat = WebMessageFormat.Json)]
public User HelloJson( string name)
{
return new User { Name = name, DayOfBirth = new DateTime( 1980, 2, 14) };
}
/**/ /// <summary>
/// 用于演示返回 JSON(集合) 的 REST 服务
/// </summary>
/// <returns></returns>
[OperationContract]
[WebGet(UriTemplate = " Users/json ", ResponseFormat = WebMessageFormat.Json)]
public List<User> HelloJson2()
{
return new List<User>
{
new User(){ Name = " webabcd01 ", DayOfBirth = new DateTime( 1980, 1, 1) },
new User(){ Name = " webabcd02 ", DayOfBirth = new DateTime( 1980, 2, 2) },
new User(){ Name = " webabcd03 ", DayOfBirth = new DateTime( 1980, 3, 3) },
};
}
}
<
UserControl
x:Class
="Silverlight20.Communication.Json"
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 ="txtMsgJson" Margin ="5" />
< TextBox x:Name ="txtMsgJson2" Margin ="5" />
</ StackPanel >
</ UserControl >
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 ="txtMsgJson" Margin ="5" />
< TextBox x:Name ="txtMsgJson2" Margin ="5" />
</ StackPanel >
</ UserControl >
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;
namespace Silverlight20.Communication
{
public partial class Json : UserControl
{
public Json()
{
InitializeComponent();
// 演示如何处理 JSON(对象)
JsonDemo();
// 演示如何处理 JSON(集合)
JsonDemo2();
}
/**/ /// <summary>
/// 演示如何处理 JSON(对象)
/// </summary>
void JsonDemo()
{
// REST 服务的 URL
Uri uri = new Uri( " http://localhost:3036/REST.svc/User/webabcd/json ", UriKind.Absolute);
// 实例化 WebClient
System.Net.WebClient client = new System.Net.WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(json_DownloadStringCompleted);
client.DownloadStringAsync(uri);
txtMsgJson.Text = " 读取 JSON(对象) 数据中。。。 ";
}
void json_DownloadStringCompleted( object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
// 发生错误的话,则打印出来
txtMsgJson.Text = e.Error.ToString();
return;
}
// 将获得的字符串转换为 JSON(对象)
var buffer = System.Text.Encoding.UTF8.GetBytes(e.Result);
var ms = new MemoryStream(buffer);
var jsonObject = System.Json.JsonObject.Load(ms) as System.Json.JsonObject;
txtMsgJson.Text = e.Result + " \r\n ";
// 解析 JSON(对象)
txtMsgJson.Text += string.Format( " 姓名: {0}, 生日: {1} ",
( string)jsonObject[ " Name "],
((DateTime)jsonObject[ " DayOfBirth "]).ToString( " yyyy-MM-dd "));
/**//*
* 总结:
* JsonObject - 一个具有零或多个 key-value 对的无序集合。继承自抽象类 JsonValue
* JsonObject.Load(Stream) - 将指定的字符串流反序列化为 JSON 对象(CLR可用的类型)
* JsonObject[key] - JsonObject 索引器,获取 JsonObject 的指定key的value
* JsonObject.ContainsKey(key) - JsonObject 对象内是否具有指定的key
*/
}
/**/ /// <summary>
/// 演示如何处理 JSON(集合)
/// </summary>
void JsonDemo2()
{
// REST 服务的 URL
Uri uri = new Uri( " http://localhost:3036/REST.svc/Users/json ", UriKind.Absolute);
// 实例化 WebClient
System.Net.WebClient client = new System.Net.WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(json2_DownloadStringCompleted);
client.DownloadStringAsync(uri);
txtMsgJson2.Text = " 读取 JSON(集合) 数据中。。。 ";
}
void json2_DownloadStringCompleted( object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
// 发生错误的话,则打印出来
txtMsgJson2.Text = e.Error.ToString();
return;
}
// 将获得的字符串转换为 JSON(集合)
var buffer = System.Text.Encoding.UTF8.GetBytes(e.Result);
var ms = new MemoryStream(buffer);
var jsonArray = System.Json.JsonArray.Load(ms) as System.Json.JsonArray;
txtMsgJson2.Text = e.Result + " \r\n ";
txtMsgJson2.Text += string.Format( " 姓名: {0}, 生日: {1} ",
( string)jsonArray.First()[ " Name "],
((DateTime)jsonArray.Single(p => p[ " Name "] == " webabcd02 ")[ " DayOfBirth "]).ToString( " yyyy-MM-dd "));
/**//*
* 总结:
* JsonArray - 一个具有零或多个 JsonValue(抽象类,JsonObject和JsonArray都继承自此类) 对象的有序序列
* JsonArray.Load(Stream) - 将指定的字符串流反序列化为 JSON 对象(CLR可用的类型)
* JsonArray[index] - JsonArray 索引器,获取 JsonArray 的指定索引的 JsonValue
* JsonArray 支持 LINQ
*/
}
}
}
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;
namespace Silverlight20.Communication
{
public partial class Json : UserControl
{
public Json()
{
InitializeComponent();
// 演示如何处理 JSON(对象)
JsonDemo();
// 演示如何处理 JSON(集合)
JsonDemo2();
}
/**/ /// <summary>
/// 演示如何处理 JSON(对象)
/// </summary>
void JsonDemo()
{
// REST 服务的 URL
Uri uri = new Uri( " http://localhost:3036/REST.svc/User/webabcd/json ", UriKind.Absolute);
// 实例化 WebClient
System.Net.WebClient client = new System.Net.WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(json_DownloadStringCompleted);
client.DownloadStringAsync(uri);
txtMsgJson.Text = " 读取 JSON(对象) 数据中。。。 ";
}
void json_DownloadStringCompleted( object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
// 发生错误的话,则打印出来
txtMsgJson.Text = e.Error.ToString();
return;
}
// 将获得的字符串转换为 JSON(对象)
var buffer = System.Text.Encoding.UTF8.GetBytes(e.Result);
var ms = new MemoryStream(buffer);
var jsonObject = System.Json.JsonObject.Load(ms) as System.Json.JsonObject;
txtMsgJson.Text = e.Result + " \r\n ";
// 解析 JSON(对象)
txtMsgJson.Text += string.Format( " 姓名: {0}, 生日: {1} ",
( string)jsonObject[ " Name "],
((DateTime)jsonObject[ " DayOfBirth "]).ToString( " yyyy-MM-dd "));
/**//*
* 总结:
* JsonObject - 一个具有零或多个 key-value 对的无序集合。继承自抽象类 JsonValue
* JsonObject.Load(Stream) - 将指定的字符串流反序列化为 JSON 对象(CLR可用的类型)
* JsonObject[key] - JsonObject 索引器,获取 JsonObject 的指定key的value
* JsonObject.ContainsKey(key) - JsonObject 对象内是否具有指定的key
*/
}
/**/ /// <summary>
/// 演示如何处理 JSON(集合)
/// </summary>
void JsonDemo2()
{
// REST 服务的 URL
Uri uri = new Uri( " http://localhost:3036/REST.svc/Users/json ", UriKind.Absolute);
// 实例化 WebClient
System.Net.WebClient client = new System.Net.WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(json2_DownloadStringCompleted);
client.DownloadStringAsync(uri);
txtMsgJson2.Text = " 读取 JSON(集合) 数据中。。。 ";
}
void json2_DownloadStringCompleted( object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
// 发生错误的话,则打印出来
txtMsgJson2.Text = e.Error.ToString();
return;
}
// 将获得的字符串转换为 JSON(集合)
var buffer = System.Text.Encoding.UTF8.GetBytes(e.Result);
var ms = new MemoryStream(buffer);
var jsonArray = System.Json.JsonArray.Load(ms) as System.Json.JsonArray;
txtMsgJson2.Text = e.Result + " \r\n ";
txtMsgJson2.Text += string.Format( " 姓名: {0}, 生日: {1} ",
( string)jsonArray.First()[ " Name "],
((DateTime)jsonArray.Single(p => p[ " Name "] == " webabcd02 ")[ " DayOfBirth "]).ToString( " yyyy-MM-dd "));
/**//*
* 总结:
* JsonArray - 一个具有零或多个 JsonValue(抽象类,JsonObject和JsonArray都继承自此类) 对象的有序序列
* JsonArray.Load(Stream) - 将指定的字符串流反序列化为 JSON 对象(CLR可用的类型)
* JsonArray[index] - JsonArray 索引器,获取 JsonArray 的指定索引的 JsonValue
* JsonArray 支持 LINQ
*/
}
}
}
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 ", DayOfBirth = new DateTime( 1980, 1, 1) },
new User(){ Name = " webabcd02 ", DayOfBirth = new DateTime( 1980, 2, 2) },
new User(){ Name = " webabcd03 ", DayOfBirth = new DateTime( 1980, 3, 3) },
};
}
}
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 ", DayOfBirth = new DateTime( 1980, 1, 1) },
new User(){ Name = " webabcd02 ", DayOfBirth = new DateTime( 1980, 2, 2) },
new User(){ Name = " webabcd03 ", DayOfBirth = new DateTime( 1980, 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 >
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 >
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}, 生日: {1} ",
obj.First().Name,
obj.First().DayOfBirth.ToString( " yyyy-MM-dd "));
/**//*
* 总结:
* LINQ to XML 相当的方便
*/
}
}
}
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}, 生日: {1} ",
obj.First().Name,
obj.First().DayOfBirth.ToString( " yyyy-MM-dd "));
/**//*
* 总结:
* LINQ to XML 相当的方便
*/
}
}
}
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();
}
}
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();
}
}
<
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 >
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 >
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;
}
}
}
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;
}
}
}