前言:
最近几天微软Live Search公布了重新架构了的Live Search API(版本为2.0 Beta)
该API律属于微软的最新Live Search Service项目 – Silk Road(丝绸之路)
那么如何在Silverlight中调用Live Search Service呢来进行网页,图片,资讯等的搜索呢?
本篇将带大家走进Silverlight+Live News Search的美妙世界
这一系列的Silverlight+Live Search的文章基于计划参加明年微软内部的TechFest展示的工作
再阅读本篇文章之前请先阅读上篇文章:Silverlight专题(12) - 基于Silverlight的Live Search网页搜索
前言:
最近几天微软Live Search公布了重新架构了的Live Search API(版本为2.0 Beta)
该API律属于微软的最新Live Search Service项目 – Silk Road(丝绸之路)
那么如何在Silverlight中调用Live Search Service呢来进行网页,图片,资讯等的搜索呢?
本篇将带大家走进Silverlight+Live News Search的美妙世界
再阅读本篇文章之前请先阅读上篇文章:Silverlight专题(12) - 基于Silverlight的Live Search网页搜索
解决方案:
UI层与Silverlight专题(12) - 基于Silverlight的Live Search网页搜索的几乎没有任何差异
所以直接列出修改部分代码如下

Code
1 <ListBox x:Name="NewsPanelCtl" Grid.Row="2" Grid.ColumnSpan="2" Margin="2,0" BorderThickness="0" Background="#3c3c3c" Height="500" Visibility="Collapsed">
2 <ListBox.ItemTemplate>
3 <DataTemplate>
4 <StackPanel Width="480">
5 <HyperlinkButton Content="{Binding Title}" NavigateUri="{Binding OriginalUrl}" TargetName="_blank"/>
6 <TextBlock Margin="0,2" TextWrapping="Wrap" Text="{Binding Snippet}"/>
7 <StackPanel Orientation="Horizontal">
8 <TextBlock Text="{Binding Source}" FontSize="10" Foreground="Green"/>
9 <Ellipse Fill="Green" Width="3" Height="3" Margin="2"/>
10 <TextBlock Text="{Binding PublishDate}" FontSize="10"/>
11 </StackPanel>
12 </StackPanel>
13 </DataTemplate>
14 </ListBox.ItemTemplate>
15 </ListBox> 底层的代码调用如下:

Code
1 private void SearchBtnCtl_Click(object sender, RoutedEventArgs e)
2 {
3 this.SearchBtnCtl.IsEnabled = false;
4 LiveSearchPortTypeClient liveSearchClient = new LiveSearchPortTypeClient();
5 SearchRequest webRequest = new SearchRequest();
6 webRequest.AppId = "44980C5CFA65792B3CDFF33A5CBF2CFAD17E3349";
7 webRequest.Market = "zh-CN";
8 webRequest.Version = "2.0";
9 webRequest.Sources = new SourceType[] { SourceType.News};
10 webRequest.Query = this.KeywordsCtl.Text.Trim();
11 webRequest.Options = new SearchOption[] { SearchOption.EnableHighlighting };
12
13 liveSearchClient.SearchAsync(webRequest);
14 liveSearchClient.SearchCompleted += new EventHandler<SearchCompletedEventArgs>(liveSearchClient_SearchCompleted);
15 }
16
17 void liveSearchClient_SearchCompleted(object sender, SearchCompletedEventArgs e)
18 {
19 SearchResponse liveSearchResponse = e.Result;
20
21 //News Search
22 NewsResponse newsResponse = liveSearchResponse.News;
23 this.WebNumCtl.Text = String.Format("共{0}条搜索结果", newsResponse.Total);
24 List<NewsInfo> m_newsList = new List<NewsInfo>();
25 if (newsResponse.Results.Length > 0)
26 {
27 foreach(NewsResult newsResult in newsResponse.Results)
28 {
29 NewsInfo newsInfo = new NewsInfo();
30 newsInfo.Title = newsResult.Title;
31 newsInfo.Source = newsResult.Source;
32 newsInfo.Snippet = newsResult.Snippet;
33 newsInfo.PublishDate = newsResult.Date;
34 newsInfo.OriginalUrl = newsResult.Url;
35 m_newsList.Add(newsInfo);
36 }
37
38 this.NewsPanelCtl.ItemsSource= m_newsList;
39 }
40
41 this.NewsPanelCtl.Visibility = Visibility.Visible;
42 this.SearchBtnCtl.IsEnabled = true;
43 } 其中还可在12行添加如下代码:
webRequest.News = new NewsRequest();
webRequest.News.Category = "rt_Business";
webRequest.News.SortBy = NewsSortOption.Date;
webRequest.News.SortBySpecified = true;
其中Category用来限制搜索的新闻类别
目前含有的类别有
rt_Business(商业新闻) rt_Entertainment(娱乐新闻) rt_Health(健康新闻) rt_Political(政治新闻) rt_Scientific(科学新闻) rt_Sports(体育新闻) rt_US(美国国内新闻) rt_World(世界新闻) rt_Local(本地新闻) rt_ScienceAndTechnology(科技新闻) 而SortBy用来设置发送到客户端的新闻以什么样的排序来发送(默认情况下是以最相关排序发送的)
其外还有LocationOverride属性,用来做新闻位置过滤,不过目前只有美国的地址才可用
而Offset是一个非常有用的属性,你可以依靠这个属性实现Live Search的分页浏览
(顾名思义,Offset就是用来表示目前想要获得的新闻位置和初始化的第一条新闻的位置之间的差距
比如,你点击第二页时,事实上Live Search将Offset设置成了10,就可以得到第11~20条新闻了)
NewsInfo的类定义如下:

Code
1 public class NewsInfo
2 {
3 public string Title { get; set; }
4 public string Snippet { get; set; }
5 public string PublishDate { get; set; }
6 public string Source { get; set; }
7 public string OriginalUrl { get; set; }
8 } 结果展示:
展示程序如下(部署在了http://Streaming.live.com)
与Live Search搜索结果比较:
代码下载:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!