远在
ASP.NET AJAX
的前一个版本,也就是
Microsoft Atlas
的官方文件中提到,
Atlas Framework
支持扩展名为
asbx
的
Bridge
服务,用来将远程
RSS
或者是
Web
服务所掷回的
Xml
文件转换为
JavaScript
可读的内容。但是,目前
ASP.NET AJAX
的
RC
版本已经不再支持
Bridge
服务,难道就没有其它的解决办法吗?答案是肯定的。
图表
1
<?xml:namespace prefix = o />
图表
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 R***equest As HttpWebRequest = HttpWebRequest.Create(RssUrl)
R***equest.Method = WebRequestMethods.Http.Get
' 建立 HttpWebResponse 类别对象来接受 Http 响应。
Dim R***esponse As HttpWebResponse = R***equest.GetResponse()
' 建立代表 Http 响应的 StreamReader 串流对象。
Dim R***eader As New StreamReader(R***esponse.GetResponseStream())
' 将 Http 响应(也就是 Xml 文件内容)写入 String 对象。
Dim R***esult As String = R***eader.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(R***esult)
End If
Return Nothing
End Function
End Class
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 R***equest As HttpWebRequest = HttpWebRequest.Create(RssUrl)
R***equest.Method = WebRequestMethods.Http.Get
' 建立 HttpWebResponse 类别对象来接受 Http 响应。
Dim R***esponse As HttpWebResponse = R***equest.GetResponse()
' 建立代表 Http 响应的 StreamReader 串流对象。
Dim R***eader As New StreamReader(R***esponse.GetResponseStream())
' 将 Http 响应(也就是 Xml 文件内容)写入 String 对象。
Dim R***esult As String = R***eader.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(R***esult)
End If
Return Nothing
End Function
End Class
最后要提到一点,除非您希望使用旧版本的
Atlas Framework
来建置
ASP.NET AJAX
应用程序,否则应该以官方正式发布的
ASP.NET AJAX
语法作为学习对象,我们下次见。
转载于:https://blog.51cto.com/liminzhang/53242