Tuesday, May 25, 2010

Disabling Browser Cache In C# and ASP.NET

Disable browser caching seems to revolve around how to make it work in IE, Mozilla and other browsers.

Here is the code that will disable browser cache. I have used this and it worked for me.

//Used for disabling page caching 
 HttpContext.Current.Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1));
 HttpContext.Current.Response.Cache.SetValidUntilExpires(false);
 HttpContext.Current.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
// Requires for IE
 HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
// Requires for Mozilla
 HttpContext.Current.Response.Cache.SetNoStore();

Using SortedList for FileWatcher

I need to do an update and archive files based on a condition in my application. So i have used sortedList to get all the files by processing the thread in my service. For details check my last post on this Multi Threading Using parameters for reference.

So I have updated on of my method DoTXT to achieve this from my previous post.

/// <summary>
        /// Thread 2, Displays that we are in thread 2
        /// </summary>
        public void DoTXT()
        {
            while (_stopThreads == false)
            {
                lock (this)
                {
                    // Write your TXT LOGIC HERE, Moving files and updating database etc
                    Console.WriteLine("Display Thread 2 " + strExt);
                    _threadOutput = "Hello Thread 2";
                    Thread.Sleep(1000);  // simulate a lot of processing
                    string[] Files = Directory.GetFiles("D://ThreadSample//Files//");
                    SortedList sList = new SortedList();
                    if (Files.Length > 0)
                    {
                        foreach (string s in Files)
                        {
                            try
                            {
                                if (Path.GetExtension(s).ToUpper().Equals(strExt))
                                {
                                    try
                                    {
                                        // if you date falls between two dates you need to change the condition while comparing.
                                        // Check the File class for rest of useful methods you require..File.GetLastAccessTime
                                        if (File.GetLastWriteTime(s).ToShortDateString().Equals(strDateTime))
                                        {
                                            DateTime dt = File.GetLastWriteTime(s);
                                            sList.Add(dt, Path.GetFullPath(s));
                                        }
                                    }
                                    catch (Exception ex)
                                    {
                                        throw ex;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                throw ex;
                            }
                        }
                        // Getting information from the SortedList.
                        foreach (string filename in sList.Values)
                        {
                            // Get all these file to zip for archive
                            Console.WriteLine("filename with sorted list." + filename);
                            // Do the db logic..
                        }
                    }
                    // we are in thread #2
                    Console.WriteLine("DoTXT Output --> {0}", _threadOutput + " datetime: -- > " + strDateTime);
                }
            }
        }

Multi Threading using Parameters

Recently i need write a file watcher. So i need to do based on the file types. I have written little bit of code for doing so. Here is the snippet of this.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Collections;
namespace ThreadSample
{
    class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            //
            // TODO: Add code to start application here
            // 
            DisplayThread objContainer1 = new DisplayThread(".TXT", DateTime.Now.ToShortDateString());
            Thread objThread1 = new Thread(new ThreadStart(objContainer1.DoTXT));
            objThread1.Start();
            DisplayThread objContainer2 = new DisplayThread(".PDF", DateTime.Now.ToShortDateString());
            Thread objThread2 = new Thread(new ThreadStart(objContainer2.DoPDF));
            objThread2.Start();
            Console.ReadLine();
        }
        
    }
    class DisplayThread
    {
        private bool _stopThreads = false;
        public bool StopThreads
        {
            set
            {
                _stopThreads = value;
            }
        }
        private string strExt, strDateTime = "";
        public DisplayThread(string Ext, string datetime)
        {
            strExt = Ext;
            strDateTime = datetime;
        }
        // shared memory variable between the two threads
        private string _threadOutput = "";
        /// <summary>
        /// Thread 1, Displays that we are in thread 1
        /// </summary>
        public void DoPDF( )
        {
            while (_stopThreads == false)
            {
                lock (this)
                {
                    // Write your PDF LOGIC HERE, Moving files and updating database etc
                    Console.WriteLine("Display Thread 1 " + strExt);
                    _threadOutput = "Hello Thread 1";
                    Thread.Sleep(1000);  // simulate a lot of processing
                    string[] Files = Directory.GetFiles("D://ThreadSample//Files//");
                    if (Files.Length > 0)
                    {
                        foreach (string s in Files)
                        {
                            try
                            {
                                if (Path.GetExtension(s).ToUpper().Equals(strExt))
                                {
                                    try
                                    {
                                        // if you date falls between two dates you need to change the condition while comparing.
                                        if (File.GetLastWriteTime(s).ToShortDateString().Equals(strDateTime))
                                        Console.WriteLine(s);
                                        // do the db logic and filemoving etc
                                    }
                                    catch (Exception ex)
                                    {
                                        throw ex;
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                throw ex;
                            }
                        }
                    }
                    // we are in thread #1
                    Console.WriteLine("DoPDF Output --> {0}", _threadOutput + " datetime: -- > " + strDateTime);
                }
            }
        }
        /// <summary>
        /// Thread 2, Displays that we are in thread 2
        /// </summary>
        public void DoTXT( )
        {
            while (_stopThreads == false)
            {
                lock (this)
                {
                    // Write your TXT LOGIC HERE, Moving files and updating database etc
                    Console.WriteLine("Display Thread 2 " + strExt);
                    _threadOutput = "Hello Thread 2";
                    Thread.Sleep(1000);  // simulate a lot of processing
                    string[] Files = Directory.GetFiles("D://ThreadSample//Files//");
                    if (Files.Length > 0)
                    {
                        foreach (string s in Files)
                        {
                            try
                            {
                                if (Path.GetExtension(s).ToUpper().Equals(strExt))
                                {
                                    try
                                    {
                                        // if you date falls between two dates you need to change the condition while comparing.
                                        // Check the File class for rest of useful methods you require..File.GetLastAccessTime
                                        if (File.GetLastWriteTime(s).ToShortDateString().Equals(strDateTime))
                                            Console.WriteLine(s);
                                        // do the db logic and filemoving etc
                                    }
                                    catch (Exception ex)
                                    {
                                        throw ex;
                                    }
                                }
                            }
                           
                            catch (Exception ex)
                            {
                                throw ex;
                            }
                        }
                       
                    }
                    // we are in thread #2
                    Console.WriteLine("DoTXT Output --> {0}", _threadOutput + " datetime: -- > " + strDateTime);
                }
            }
        }
    }
}


I need to check files based on the last modified date. so i am using File class to know the GetLastWriteTime. Instead you can also using System.IO.FileInfo to get the information of LastWriteTime.



string[] Files =  Directory.GetFiles("D://ThreadSample//Files//");
System.IO.FileInfo fileInfo = null;
if (Files.Length > 0)
 {
   foreach (string s in Files)
   {
     fileInfo = new System.IO.FileInfo(s);
      try
      {
        DateTime LastWT = fileInfo.LastWriteTime;
        Console.WriteLine("LastWrite Time" + LastWT.ToShortDateString());
       }
       catch (Exception ex)
       {
         throw ex;
       }
    }
}


Happy coding :-)

Thursday, May 20, 2010

HEX to Color in Silverlight GridView

Recently i need to use colors in my grid cells, for that i have written code in RadGridView_RowLoaded to set the colors. But i had trouble setting color as background to cells. I could able to achieve this way.

 // Setting backgrounds to cells 
        private void RadGridView1_RowLoaded(object sender, Telerik.Windows.Controls.GridView.RowLoadedEventArgs e)
        {
            string strPirority = "";
            string strStage = "";
            if (e.Row.Item != null)
            {
                strPirority = ((TelerikOrderSilverlight.ServiceReference1.v_order_mgmt)(((Telerik.Windows.Controls.RadRowItem)(((Telerik.Windows.Controls.GridView.GridViewRowItemEventArgs)(e)).Row)).Item)).priority.ToString();
                if (((TelerikOrderSilverlight.ServiceReference1.v_order_mgmt)(((Telerik.Windows.Controls.RadRowItem)(((Telerik.Windows.Controls.GridView.GridViewRowItemEventArgs)(e)).Row)).Item)).stage != null)
                {
                    strStage = ((TelerikOrderSilverlight.ServiceReference1.v_order_mgmt)(((Telerik.Windows.Controls.RadRowItem)(((Telerik.Windows.Controls.GridView.GridViewRowItemEventArgs)(e)).Row)).Item)).stage.ToString();
                }               
                for (int i = 0; i < e.Row.Cells.Count; i++)
                {
                    if (e.Row.Cells[i].Column.UniqueName == "priority")
                    {
                        if (strPirority == "Critical")
                        {
                            // Can set this way using solid
                            e.Row.Cells[i].Background = new System.Windows.Media.SolidColorBrush(Colors.Red);
                        }
                    }
                    if (e.Row.Cells[i].Column.UniqueName == "MileStone")
                    {
                        if (strStage.Length > 0)
                        {
                            // You can set this way using Hexa codes.
                            if (strStage.Substring(0, 4) == "Bill")
                            {
                                e.Row.Cells[i].Background = new System.Windows.Media.SolidColorBrush(GetColorFromHexa("#FF000000"));
                            }
                        }
                    }
                }
            }
        }
        private Color GetColorFromHexa(string hexaColor)
        {
            return Color.FromArgb(
                    Convert.ToByte(hexaColor.Substring(1, 2), 16),
                    Convert.ToByte(hexaColor.Substring(3, 2), 16),
                    Convert.ToByte(hexaColor.Substring(5, 2), 16),
                    Convert.ToByte(hexaColor.Substring(7, 2), 16));
        }


Here is the list of all predefined SolidColorBrush objects.

Thursday, May 13, 2010

Configuring IIS for Silverlight Applications

Recently i want to deploy my Silverlight application Window 2003 Server. I have copied all the files and thought it will work as in development machine. But i am not able to run on Window 2003 server, so for that i need to configure my server to support silverlight.

Here is the URL that found helpful.