SHARE
TWEET

Martin S

a guest Mar 17th, 2009 646 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Configuration;
  3. using System.Data.SqlClient;
  4. using System.IO;
  5. using System.Text;
  6. using System.Web;
  7. using System.Web.Services;
  8. using System.Xml;
  9.  
  10. namespace Dileno
  11. {
  12.         /// <summary>
  13.         /// Summary description for $codebehindclassname$
  14.         /// </summary>
  15.         [WebService(Namespace="http://tempuri.org/")]
  16.         [WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
  17.         public class Rss : IHttpHandler
  18.         {
  19.                 // Settings for RSS feed: site url, site title and feed cache name
  20.                 private string _siteUrl = "http://blogg.dileno.com/";
  21.                 private string _siteTitle = "blogg.dileno.com";
  22.                 private string _feedCacheName = "RssFeedCache";
  23.  
  24.                 public void ProcessRequest(HttpContext context)
  25.                 {
  26.                         HttpContext.Current.Response.Clear();
  27.                         HttpContext.Current.Response.ContentType = "text/xml";
  28.  
  29.                         Object objFeed = context.Cache.Get(_feedCacheName);
  30.  
  31.                         if (objFeed == null) CreateFeedCache();
  32.  
  33.                         HttpContext.Current.Response.Write(context.Cache.Get(_feedCacheName).ToString());
  34.                         HttpContext.Current.Response.End();
  35.                 }
  36.  
  37.                 /// <summary>
  38.                 /// Adds items to cache
  39.                 /// </summary>
  40.                 private void CreateFeedCache()
  41.                 {
  42.                         // Use MemoryStream for UTF-8 output
  43.                         MemoryStream ms = new MemoryStream();
  44.                         StreamWriter objWriter = new StreamWriter(ms);
  45.  
  46.                         // Use indenting for easier reading and debugging
  47.                         XmlWriterSettings settings = new XmlWriterSettings();
  48.                         settings.Indent = true;
  49.  
  50.                         // Instance of XML object for RSS feed
  51.                         XmlWriter objXml = XmlWriter.Create(objWriter, settings);
  52.  
  53.                         // Build XML document header
  54.                         objXml.WriteStartDocument();
  55.                         objXml.WriteStartElement("rss");
  56.                         objXml.WriteAttributeString("version", "2.0");
  57.                         objXml.WriteStartElement("channel");
  58.                         objXml.WriteElementString("title", _siteTitle);
  59.                         objXml.WriteElementString("link", _siteUrl);
  60.                         objXml.WriteElementString("description", "RSS för tio senaste inläggen på " + _siteTitle);
  61.                         objXml.WriteElementString("copyright", "&copy; Martin Söderlund");
  62.                         objXml.WriteElementString("ttl", "15");
  63.  
  64.                         // Fetch items from database and add to XML feed
  65.                         string strSQL = "SELECT TOP 10 id,heading,intro,entry,url,dt FROM tblEntries ORDER BY id DESC";
  66.  
  67.                         SqlConnection objConn = new SqlConnection(ConfigurationManager.ConnectionStrings["dbEntries"].ConnectionString);
  68.                         SqlCommand objCmd = new SqlCommand(strSQL, objConn);
  69.  
  70.                         try
  71.                         {
  72.                                 objConn.Open();
  73.                                 SqlDataReader sdr = objCmd.ExecuteReader();
  74.  
  75.                                 while (sdr.Read())
  76.                                 {
  77.                                         objXml.WriteStartElement("item");
  78.                                         objXml.WriteStartElement("title");
  79.                                         objXml.WriteCData(sdr.GetValue(1).ToString());
  80.                                         objXml.WriteEndElement();
  81.                                         objXml.WriteElementString("link", _siteUrl + "entry.aspx?id=" + sdr["id"].ToString());
  82.                                         objXml.WriteStartElement("description");
  83.                                         objXml.WriteCData(sdr["intro"].ToString() + sdr["entry"].ToString());
  84.                                         objXml.WriteEndElement();
  85.                                         objXml.WriteElementString("guid", _siteUrl + "entry.aspx?id=" + sdr["id"].ToString());
  86.                                         objXml.WriteElementString("pubDate", Convert.ToDateTime(sdr["dt"]).ToString("R"));
  87.                                         objXml.WriteEndElement();
  88.                                 }
  89.                         }
  90.  
  91.                         catch { }
  92.                         finally
  93.                         {
  94.                                 objConn.Close();
  95.                         }
  96.  
  97.                         objXml.WriteEndElement();
  98.                         objXml.WriteEndElement();
  99.                         objXml.WriteEndDocument();
  100.                         objXml.Flush();
  101.                         objXml.Close();
  102.  
  103.                         // Read from MemoryStream
  104.                         TextReader objReader = new StreamReader(ms);
  105.                         ms.Seek(0, SeekOrigin.Begin);
  106.  
  107.                         string rssFeed = objReader.ReadToEnd();
  108.  
  109.                         objReader.Close();
  110.  
  111.                         // Cache XML data for 8 hours
  112.                         HttpContext.Current.Cache.Insert(_feedCacheName, rssFeed, null, DateTime.Now.AddHours(8), TimeSpan.Zero);
  113.                 }
  114.  
  115.                 public bool IsReusable
  116.                 {
  117.                         get
  118.                         {
  119.                                 return false;
  120.                         }
  121.                 }
  122.         }
  123. }
RAW Paste Data
Want to get better at C#?
Learn to code C# in 2017
Top