WCF+Silverlight 制作一个简单RSS的阅读器(一)

很喜欢Silverlight,可能以前比较喜欢Flash制作的缘故吧,只是最后还是从事了 winForm的开发,毕竟WinForm的工作比较好找,自己的美工技术也一般。
这段时间一直在学习Silverlight之中,边学习边写博客吧,希望能和朋友们一起分享Silverlight的快乐。同时能解决一些实际中的问题,毕竟现在Silverlight的资料还是太少了。
言归正传:
1、起初我的想法是直接利用从CodeProject中下载的Racoom的动态库,并采用数据绑定的方式来直接完成Rss的阅读,估计可能只要一个小时。事实证明这种方法是行不通的,因为Silverlight对很多类库都不支持,必须使用Silverlight本身的动态库才可以。
2、那怎么办?自己重写一个吧,新建一个Silverlight库,创建一个RSSChannel,

ContractedBlock.gif ExpandedBlockStart.gif Code
 public class RssChannel
    {
        
public RssChannel(string location)
        {
            Uri uri 
= new System.Uri(location);
            HttpWebRequest request 
=(HttpWebRequest) WebRequest.Create(uri);
            request.Method 
= "GET";
            IAsyncResult result 
= request.BeginGetResponse(new AsyncCallback(RespCallback), request);
           

        }

        
private void RespCallback(IAsyncResult result)
        {
            
try
            {
                HttpWebRequest req 
= result.AsyncState as HttpWebRequest;
                HttpWebResponse res 
= req.EndGetResponse(result) as HttpWebResponse;
                Stream strm 
= res.GetResponseStream();
            }
            
catch(Exception ex)
            {
                Console.Write(ex.Message);

            }
        }
    }

最简单的方式,嘿嘿这样总行了吧。在Page页面中初始化实例,去访问我最常去的http://www.codeproject.com/webservices/articlerss.aspx?cat=1,
问题来了,拒绝访问,说是策略错误。啥鸟问题,这么复杂,Google一下吧,原来是没有CilentAccessPolicy.xml文件阿,OK,搞一个放在目录下
再次运行错误依旧,这么麻烦,继续Google,因为英文的居多,只好慢慢的看了。终于搞明白了,这个文件是要放到你要访问网站的根目录下才可以通过Silverlight去访问的。或者你的Silverlight应用程序要放到此网站下。How can i do???
3、咱不行可以曲线救国阿?自己创建一个WebService,把地址传进来,将解析好的数据传输去不就OK了。说干咱就干吧,听说WCF这东西挺好用的,创建一个WCF Service吧。在项目中新建一个Silverlight项目,选择 Add a new ASP.NET Web project to the solution to host silverlight.
直接运行一下,没有啥东西。右键选择New Item...,当时不知道还有一个Silverlight-enabled WCF Service,直接就选了个WCF Service,
引用Racoom的动态库,代码如下

ContractedBlock.gif ExpandedBlockStart.gif Code
 [ServiceContract]
    
public interface IRssService
    {
        [OperationContract]
        List
<RssXml.RssItem> GetRssItems(string location);
        [OperationContract]
        
void DoWork();
    }

   [AspNetCompatibilityRequirements(RequirementsMode 
= AspNetCompatibilityRequirementsMode.Required)]
    
public class RssService : IRssService
    {
       
        
#region IRssService Members

        List
<RssXml.RssItem> IRssService.GetRssItems(string location)
        {
            Uri uri 
= new Uri(location);
            RssChannel channel 
= new RssChannel(uri);
            List
<RssXml.RssItem> items = new List<RssXml.RssItem>();
            
for (int i = 0; i < channel.Items.Count; i++)
            {
                RssXml.RssItem item 
= new RssXml.RssItem();
                item.Title 
= channel.Items[i].Title;
                item.Comments 
= channel.Items[i].Comments;
                item.Description 
= channel.Items[i].Description;
                item.Link 
= channel.Items[i].Link;
                items.Add(item);
            }
            
return items;
        }

        
#endregion

        
#region IRssService Members


        
public void DoWork()
        {
            
string s = "Do it";
        }

        
#endregion
    }


想不到内容写起来还真多,只能明天晚上继续了(怎么感觉像天涯上骗回帖的)。
公告栏里有我的程序演示,如果显示报错,就是我没开服务器了。

转载于:https://www.cnblogs.com/wanghualiang/archive/2008/12/16/1356345.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值