ASP.NET AJAX - 如何制作RSS订阅器
远在 ASP.NET AJAX 的前一个版本,也就是 Microsoft Atlas 的官方文件中提到,Atlas Framework 支持扩展名为 asbx 的 Bridge 服务,用来将远程 RSS 或者是 Web 服务所掷回的 Xml 文件转换为 JavaScript 可读的内容。但是,目前 ASP.NET AJAX 的 RC 版本已经不再支持 Bridge 服务,难道就没有其它的解决办法吗?答案是肯定的。
图表1
图表1是网页范例的执行画面,按下「取得RSS」按钮之后,窗体会自动向章立民研究室部落格所提供的 RSS 服务发出异步处理请求,等到服务器接受请求处理完毕之后,会将目前章立民研究室部落格首页出现的文章与相关信息,以 Xml 格式掷回。
稍后窗体会接到服务器所响应的 Xml 数据,通过 ASP.NET AJAX 所提供的 XPathBridgeTransformer 类别将 Xml 内容转换成 JavaScript 可以识别的结果,经过版面编排后呈现在画面上。兹将转换 Xml 文件格式的 Web 服务程序代码列示如下:
<ScriptService()> _
Public Class WS_RSS_Header
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function RequestRSS() As Object
' 读取 Web.config 组态档设定。
Dim RssUrl As New _
Uri(WebConfigurationManager.AppSettings.Get("LimingStudioRssUrl").ToString())
If RssUrl.Scheme = Uri.UriSchemeHttp Then
' 建立 HttpWebRequest 类别对象来发出 Http 请求。
Dim RssRequest As HttpWebRequest = HttpWebRequest.Create(RssUrl)
RssRequest.Method = WebRequestMethods.Http.Get
' 建立 HttpWebResponse 类别对象来接受 Http 响应。
Dim RssResponse As HttpWebResponse = RssRequest.GetResponse()
' 建立代表 Http 响应的 StreamReader 串流对象。
Dim RssReader As New StreamReader(RssResponse.GetResponseStream())
' 将 Http 响应(也就是 Xml 文件内容)写入 String 对象。
Dim RssResult As String = RssReader.ReadToEnd()
' 建立 XPathBridgeTransformer 类别对象来转换 Xml 内容。
Dim RssTransformer As New _
Microsoft.Web.Preview.Services.XPathBridgeTransformer()
' 建立 BridgeTransformData 类别对象储存转换 Xml 信息。
Dim RssData As New Microsoft.Web.Preview.Services.BridgeTransformData()
' 设定 Xml 转换准则,也就是筛选 Xml 文件的条件。
RssData.Attributes.Add("selector", "channel")
' 建立 Dictionary 对象,储存筛选后的 Xml 内容。
Dim RssDictionary As New Dictionary(Of String, String)(3)
' 加入 Dictionary 对象内容,
' 键值(Key)代表前端 JavaScript 撰写指令码使用的名称,
' 数值(Value)代表 Xml 文件标签。
RssDictionary.Add("HeaderTitle", "title")
RssDictionary.Add("HeaderLink", "link")
RssDictionary.Add("HeaderDescription", "description")
' 将 Dictionary 对象 加入 BridgeTransformData 类别对象。
RssData.Dictionaries.Add("selectedNodes", RssDictionary)
' 初始化建立 XPathBridgeTransformer 类别对象,预备进行 Xml 数据转换。
RssTransformer.Initialize(RssData)
' 正式进行 Xml 文件转换,并将结果掷回前端。
Return RssTransformer.Transform(RssResult)
End If
Return Nothing
End Function
End Class
最后要提到一点,除非您希望使用旧版本的 Atlas Framework 来建置ASP.NET AJAX 应用程序,否则应该以官方正式发布的 ASP.NET AJAX 语法作为学习对象,我们下次见。