DownloadStringCompleted event and other stuff in Windows Phone, C#

I always wondered why on earth DownloadStringCompleted method of WebClient class is a void type. Is there any way I could’ve gone for a  overloaded DownloadStringCompleted function to get my job done so it can return the result to the caller.

I was trying to use a facade like structure for a Windows Phone app. So usually at very first stage of writing C# code, one usually goes with a instance of WebClient object like below:


WebClient Client=new WebClient();
Client.DownloadStringCompleted += SomeDownloadStringCompletedEventHandler;
Client.DownloadStringAsync(SomeUri)

But the irony is here everytime I fetch a different website I write a minimal line of code redundantly (yes, I was a darn noob). But the thing is, I was trying to attach a parser and get back my result to feed the parser with one call. I thought of forcing the download to synchronous await but didn’t want to jeopardize my apps fluidity rather I decided to even parse on async so even when parsing the fetched data the app doesn’t loose its respective fluidity.

After some searching I came with something like this. I don’t know how would it work later when I write the parser but still works okay and saves me a bunch of redundant codes.


public void DownloadWebSiteNParse(Uri WebUri, Action ResultCallBack, Action ErrorCallBack)
{
string response = string.Empty;
HtmlDocument ReturnDoc = new HtmlDocument();
WClient.DownloadStringCompleted += (sender, e) =
{
response = e.Result;
if (response == null || e.Error != null)
{
if (ErrorCallBack != null)
ErrorCallBack(e.Error.Message);
}
else
{
ReturnDoc.LoadHtml(response);
if (ResultCallBack != null)
ResultCallBack(ReturnDoc);
}
};
WClient.DownloadStringAsync(WebUri);
}

কুয়েট সিএসই এবং যাবার আগে যা বলা উচিত – ১

সারা জীবন প্রশ্নের উত্তর দিতে দিতে অনেক কথাই সংক্ষেপে বলা হয়ে যায়। আজকে যাবার আগে কিছু কথা বলা দরকার। অনেক দিন ধরেই নিজের মধ্যে চেপে গেছি এই কথাগুলো। আবিদ সহ বেশ কয়েকজন বন্ধু কিছু বলেছে। চলে যাচ্ছি কয়েকদিন পর। তাই এগুলো বলে যাওয়া উচিত মনে হচ্ছে

হতাশা কুয়েটের ডিকশনারীর সবচেয়ে পপুলার শব্দ। এর কারণের শেষ নাই। কিন্তু সত্যি কথা হচ্ছে হতাশ হবার কোন কারণ নাই। আমার ছাত্র জীবনের সবচেয়ে গুরুত্বপূর্ন দুই ব্যক্তি তানজীম ভাই (তানজীম সাকিব), তেল নয়, ওনাকে চিনি বেশ আগে থেকে; এবং তানবিন ইসলাম সিয়াম। আমি অনুপ্রাণিত হয়েছিলাম ব্যক্তি তানজীম এবং এবং ব্যাক্তি সিয়াম ভাই কে দেখে, কোন প্রফেশনাল দৃষ্টিভঙ্গি  থেকে নয়। যদি আপনার মনে হয় আপনার জীবন কষ্টের এবং সাফল্য এর মাঝখান থেকে আনা সম্ভব নয়, তানজীম সাকিব ভাইয়ের জীবনের ইতিহাসটা একবার শুনবেন। তা যদি যুতসই মনে না হয়, পড়তে থাকুন। রাস্তার অনেক ছেলে আপনার চেয়ে বড় স্বপ্ন দেখে। আপনার ভয় কি?

হ্যাঁ, কুয়েট সমস্যার বস্তা একটা জায়গা, আমি জানি। নতুন করে বলবার কিছু নাই। এখানে সুযোগ কম আসে, সত্য। Bill Gates একটা ভয়াবহ সত্য কথা বলে গিয়েছিলেন, Life is not fair, get used to it. বুয়েট, সাস্ট ভালো না খারাপ, কত বেশি এক্সপোজার বা সুযোগ পায় তা চিন্তা না করে, ওরা ১০০ মাইল গেলে আমাদের ১১৫ মাইল যাবার চিন্তা করা উচিত। বাস্তব টা কঠিন। কেউ যেচে আপনাকে সুযোগ দেবেনা। আপনার আলো আপনাকেই জ্বালাতে হবে। কেউ জ্বালিয়ে দেবেনা। বাস্তব চিনতে শিখুন।

খুলনা ঢাকা থেকে অনেক দূরে, সত্য। কিন্তু ভেবে দেখুন বাংলাদেশের অনেক প্রান্ত থেকেই ভালো প্রফেশনাল বের হয়। (আমি ইন্ডাস্ট্রিমুখো হতে চাই, সেটার কথাই বলছি)। আপনি চিন্তা করতে পারবেন না কত কষ্ট করে কত জায়গায় কত লোক আছে। খুলনা দুরে? তাহলে আর একটু বেশি কষ্ট করুন। পারবেন। কোন প্রতিযোগীতায় যাবেন, ঢাকা যাওয়া দরকার এক দিনের জন্য, আলসেমি না করে যান।

Dedication এক জায়গায় দিন। যারা ACM করছো, programming contest করছো, করতে থাকো। পিছপা হয়োনা। Success is a journey, not a destination. তোমার রাস্তা তুমিই বানাতে পারবে। কারো কথায় প্রভাবিত হয়ে ছেড়ে দিয়োনা। বলতে পারো, ভাই, সে তো করেনাই, তো? তার মানে এই না তুমি করলে ভালো করবেনা । তোমার ভালো লাগলে করতে থাকো। যে কোন একটা প্রবলেম টাইপে ভালো হয়ে নাও। শুধু OOP ভুলে যেওনা। ওটায় খেয়াল রেখো। সবার রাস্তা এক নয়। কেউ ডেভলপ করতে ভালোবাসলে তার এলগরিদম জানার দরকার নাই মনে করলে ভুল করছো। CSE এর সব বস্তুই কাজে লাগে, ফেলনা কিছুই নাই। API জানা আর programming জানা ভিন্ন বস্তু। আপনি যদি উপরে উঠতে চান, আপনার problem solving skill থাকতেই হবে। আমি ভুল করেছি। আপনি করবেন না। যে কোন একটায় ভালো জানুন। বাকিগুলো জানবেন না তা না। আপনি এন্ড্রয়েডে ভালো মানে আপনাকে সেটা দিয়েই বিবেচনা করা হবে তা না। সেটা শুধুমাত্র প্রমাণ করে আপনি হ্যান্ডহেল্ড ডিভাইস এ ভালো। বারবার সুইচ না করে একটা করুন। যে যাই বলুক।

প্ল্যাটফর্ম ডিলেমা আরেক মজার সমস্যা। ভাই, ডেভলপার রা প্ল্যাটফর্ম বানায়। প্ল্যাটফর্ম ডেভলপার বানায় না। কে অ্যান্ড্রয়েড আর কে উইন্ডোজ ফোনে কাজ করে সেটা ব্যাপার না। নিজে যেটায় ভালো সেটা করেন। আগে ল্যাংগুয়েজ, এলগরিদমে জোর দেন। এপিআই শিখতে লাগে দুই দিন। ডিজাইন প্যাটার্ন কুয়েটে শেখানো হয়না। এটা সিলেবাসে থাকা উচিত। নিজে শিখে নেন। লাগবে।

সম্মান করতে শিখুন। কে কোথায় কিসে কাজ করে ব্যাপার না। যে যেখানেই ভালো তাকে সম্মান দিন। অন্য কেউ আপনার কাজকে হেয় করলে হাসিমুখে তার উত্তর দিন। জ্ঞানের তিনটি স্তর, প্রথমটায় মানুষ উদ্ধত হয়, দ্বিতীয়টায় মানুষ শান্ত হয়, তৃতীয়টায় হীনমন্যতায় ভোগে কারণ সে উপলব্ধি করে সে কতো কম জানে। নিজের কাজকে যতটুকু সম্মান দেবেন, মানুষের টাকেও ততটুকু। কাউকে হেয় করবেন না সে আপনাকে করুক আর নাই করুক। সম্মান ব্যর্থ হয়না। আমি উইন্ডোজ ফোন , সি শার্প এ কাজ করি। অনেক হাস্যরসের সামনে পড়েছি জীবনে এই প্ল্যাটফর্মে থেকে। কিন্তু আমি আজ দাঁড়িয়ে আছি এই  প্ল্যাটফর্ম দিয়েই। কারো কটুক্তি কানে তুলবেন না। আপনার স্বপ্ন সত্যি করার ক্ষমতা আপনার আছে। নিজেকে বিশ্বাস করুন। অন্যের উপর নির্ভরশীলতা ছাড়ুন। নাহলে পিছিয়েই থাকবেন। Take Everything With a Smile.

Sacrifice করতে প্রস্তুত থাকুন। নিজের স্বপ্ন পূরণ করতে গিয়ে কিছু আপনাতে ছাড়তেই হবে। আমি হারিয়েছি অনেক। তাই বলে এই না সবাইকেই করতে হবে। শুধু প্রস্তুত থাকুন যদি কোথাও সুযোগ পান নিজের একটু আনন্দ ছাড় দেয়াও লাগে, পিছপা হবেন না। সবাইকে আপনি খুশি করতে পারবেন না। যারা আপনাকে ভুল বুঝবে তাদের কষ্ট লাঘব করতে যা করা লাগে করবেন। কিন্তু নিজে জ্বলতে শিখুন।

স্বপ্ন দেখতে শিখুন। স্বপ্ন ই প্রেরণা দেয় বাঁচার। স্বপ্ন ছাড়া কিছু সম্ভব নয়। কুয়েটে স্বপ্ন হয়তো মারা যায়। কিন্তু তার মানে এই না আপনি পারবেন না।

প্রাইভেট ভার্সিটি শুনে নাক সিঁটকাবেন না। সম্মান দিতে শিখুন। বাংলাদেশের অনেক প্রান্তে অনেক ছাত্র আছে যারা সুযোগ কতটুকু পেয়েছে বিচার না করে যুদ্ধ করতে থাকে। ভালো কাজের প্রশংসা করেন। সেটা যেখান থেকেই আসুক। আপনি চিন্তা করতে পারবেন না কত ভালো ভালো জায়গায় এরা নিজেদের স্বাক্ষর রেখেছে। Microsoft কিংবা Google এ বাদ যায়নি।

নিজের পরিচয় তৈরী করুন। আপনি যত বড় কারো সাথেই থাকুন না কেন দিনশেষে আপনি কে সেটা বড় বিষয়, কার সাথে আপনি চলেন তা নয়। যারা আপনাকে দেখে হাসছে, একদিন আপনার কষ্ট তাদের সব কটুক্তি কে ছাড়িয়ে যাবে। বিশ্বাস করুন, কষ্ট বৃথা যায়না।

মানুষকে উৎসাহিত করুন। কেউ কোথাও ভালো কাজ করলে তাকে উৎসাহ দিন। নিরুৎসাহিত করবেন না। তাতে আপনার গৌরব প্রকাশ পায়না। আপনার সংকীর্ণতা প্রকাশ পায়।

কম্পিউটার সায়েন্সে পড়তে এসছেন। বিনোদন আপনার জন্য, সত্য। কিন্তু সেটাকেই সব বানিয়ে ফেলবেন না। শেখার চেষ্টা চালান। পারুন আর নাই পারুন। কে কি বললো বিষয় না। কম্পিউটার থেকে দূরে থাকবেন না। চিনতে শিখুন, ব্যবহার করতে শিখুন। যে ঠিকমতো মাউস নাড়াতে পারছেন না তার জন্য আগে কম্পিউটার চেনা জরূরী। পরে প্রোগ্রামিং। প্রথম বর্ষে যারা কম্পিউটার ব্যবহার করতে পারেন নি আগে, হতাশ না হয়ে শুরু করে দিন। দিনশেষে আপনাকে একটু বেশি হাটতে হবে মানে এই না আপনি হাটতে পারবেন না।

আমরা শুরু করেছি। আমার সকল বন্ধু করছে । আবিদ, আশেক, অতনু, রানা, আশিক, গানিম, প্রীতম, ফাহিম, অরিন, রাকিব, আদনান সবাই চেষ্টা করছে। একদিন পরিস্থিতি বদলাবে। 2k5, 2k6, 2k7 চেষ্টা করছে। কুয়েট জ্বলবে। দেশ বা দেশের বাইরে, ইন্ডাস্ট্রি বা রিসার্চ সব জায়গাতেই কুয়েট দাঁড়াবে। আপনি শামিল হোন। আমরা অজুহাত চাইনা। সংগ্রাম চাই। কথা না বাড়িয়ে আমরা কাজটুকু করি। হয়ে যাবে।

প্রোগ্রামিং ব্যতীত টিকতে পারবেন না। লিখে রাখুন কথাটা। আপনি ঠিক করুন কিসে আপনি খুশি। Sky is the limit.

Run after skills. People will criticize you, taunt you. Learn from those.  In the last day, if you keep fighting, you will win. Winning doesn’t mean getting a good job or earn a lot. It means to live up to that name that you dreamed of. Its a journey. Its not a destination.

Google Translate without API helper for C# and Windows Phone

Hi!

As usual I’m stricken with a class test syllabus and its boring enough to motivate me to get coding on C#. I was actually looking for making a Bangla Dictionary for Windows Phones and Androids later. I had like 2,50,000 words in my hand and wanted to make something that would give me a sql server sdf file and a sqlite database translating all those words in a batch processing mode.😉

The thing is, I made a pretty interesting stuff today. A very tiny and noob C# library that helps you translate text from google translate without the api’s help itself. Kindly only translate words as I didn’t consider sentences for now.

The library is attached below and named GoogleTranslateWithNoApiBasicWP. I’m planning to make an advanced one with Batch processing from text files, database file returns and xml dictionary and stuff like that. But one night has to be sufficient for this.🙂

So, this is the daily deeds category of my blog and that means “less talk, more code”.
The library has two releases, one for .net 4 and one for windows phones. And, one other thing, I used this amazing library named Json.net here. So, you have to reference it too to make this library work. Ive already attached the .dll though.

Json.net home : http://json.codeplex.com/

in .net 4 version, all you gotta do is:

TranslateHelper Helper = new TranslateHelper();
TranslatedData foundData=Helper.TranslateThis("love", "en", "bn");

And to get a good vision on the TranslatedData class, I used this to write it using a StreamWriter. You can easily get only the translated data by accessing TranslatedText. But if you need all the meanings you gotta access Meanings list and you’ll find parts of speech and terms under that. I used something like this below to write these in a text file:

StreamWriter writer = new StreamWriter("returnData.txt");

writer.WriteLine("Source Language: " + foundData.SourceLang);
writer.WriteLine("Target Language: " + foundData.TargetLang);
writer.WriteLine("Source Text: " + foundData.SourceText);
writer.WriteLine("Translated Text: " + foundData.TranslatedText);

foreach (var item in foundData.Meanings)
{
writer.WriteLine(item.PartsOfSpeech + ": ");

foreach (var term in item.Terms)
{
writer.WriteLine(term.ToString());
}

}
writer.WriteLine("----------------------------------------");

writer.Close();

Now come to the Windows Phone part: Its kind of the same except you got to use the OnTranslationCompleted event as it loads Async.

public MainPage()
{
InitializeComponent();

helper = new TranslateHelper();
helper.TranslateThis("love", "en", "bn");
helper.OnTranslationCompleted += helper_OnTranslationCompleted;

}

void helper_OnTranslationCompleted(object myObject, TranslateArgs myArgs)
{
Dispatcher.BeginInvoke(()=>this.Data.Text=helper.foundData.TranslatedText);
}

Hope this helps!🙂 I will probably upload it to codeplex (If it really seems worthy enough later) but for now you can check the little baby lib through here http://sdrv.ms/Yyxkd1

Install .net 3.5 offline in windows 8

Hi People!

Its kind of annoying in windows 8 to install .net 3.5 online every time with a fresh install where it could’ve been done offline as the installer does have it inside. So, if you happen to have a Windows 8 installation disk or .iso, use this to install .net 3.5 offline. Just select the drive the .iso or the disk is mounted or extracted and click install.

Hope it helps. I only called dism.exe inside to get the package updated.🙂

Download from http://sdrv.ms/12623Xa

Daily deeds:Windows Phone dev issues, changing common Control Properties in codebehind. :)

আজকের টা বাংলায়! Smile
প্রায়শই যথন উইন্ডোজ ফোনটা নিয়ে গুতোগুতি চলে তখন প্রথমেই কোন কিছু যখন করতে যাই সর্বপ্রথম যে ব্যাপারটা নিয়ে চিন্তা ভাবনা চলে সেটা হচ্ছে XAML. কিন্তু গ্যাঞ্জামটা পাকে তখন যখন আমার মাথায় ডাইন্যামিক কিছু করার ভুত চাপে এবং UI কে C# থেকে Control করবার প্রয়োজন হয়। তখন XAML এর Attribute গুলো কিভাবে এখানে Assign করবো বের করতে বেশ ঝামেলা পোহাতে হয়। যদিও MSDN আছে তাও ভাবলাম, লিখে রাখি, দোষ কি? এখানে XAML এবং C# একসাথে নোট করা আছে, দেখা লাগলে দেখে নিতে পারেন। Smile

সমস্যা: TextBlock এর TextWrapping property
XAML:

<TextBlock x:Name="textBlockWrapped" TextWrapping="Wrap" Text="This should be wrapped."/>

C#:

this.textBlockWrapped.TextWrapping = TextWrapping.Wrap;

সমস্যা: Horizontal Alignment/Vertical Alignment ঠিক করা
XAML:

<Button x:Name="button" Content="Shift" HorizontalAlignment="Left"  VerticalAlignment="Top" Width="63" />

C#:


button.HorizontalAlignment=(HorizontalAlignment)AlignmentX.Left;
button.VerticalAlignment=(VerticalAlignment)AlignmentY.Top

সমস্যা: ScrollBar Visibility ঠিক করা
XAML:


<ScrollViewer x:Name="scrollViewer" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Visible">
<!--some code here...-->
</ScrollViewer>

C#:


this.scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible;
this.scrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Auto;

সমস্যা: Font ঠিক করা
XAML:


<TextBlock Text="TextBlock" FontWeight="Bold" FontSize="30" FontFamily="Arial" x:Name="textBlock"/>

C#:


this.textBlock.FontSize = 30;
this.textBlock.FontFamily = new FontFamily("Arial");
this.textBlock.FontWeight = FontWeights.Bold;

যদি Font আগেই embedded হয় তো?

XAML:


<TextBlock Text="TextBlock" FontWeight="Bold" FontSize="30" FontFamily="YourProjectName;component/Fonts/Fonts.zip#Siyam Rupali" x:Name="textBlock"/>

C#:


this.textBlock.FontFamily = new FontFamily("YourProjectName;component/Fonts/Fonts.zip#Siyam Rupali");

সমস্যা: Button অথবা অন্য কোন Control কোন Grid বা Container এ যোগ করা

C#:


Button btn = new Button();
//ContentPanel is the main Grid in MainPage.xaml
this.ContentPanel.Children.Add(btn);

 

সমস্যা: Background পরিবর্তন করা
XAML:


<Button x:Name="button" Content="Change Color" Background="Green"/>

C#:


this.button.Background = new SolidColorBrush(Colors.Green);
this.button.Background = new SolidColorBrush(Color.FromArgb(10,15,100,124));

যদি Backgroundimage দিতে চাই তো?
XAML:

<Button x:Name="button" Content="Image" Width="100" Height="100">
<Button.Background>
<ImageBrush ImageSource="logo.png"/>
</Button.Background>
</Button>

C#:


ImageBrush imageBrush = new ImageBrush();
Uri uri = new Uri("logo.png", UriKind.RelativeOrAbsolute);
imageBrush.ImageSource = new BitmapImage(uri);
this.button.Background = imageBrush;

সমস্যা: Thickness পরিবর্তন করা

XAML:


<Border BorderBrush="Red" x:Name="border" Height="200" Width="200" BorderThickness="5,4,3,2">
<!--Some code here...—>
</Border>

C#:


this.border.BorderThickness = new Thickness(5, 4, 3, 2);
this.border.BorderThickness = new Thickness(5);

Daily Deeds: Windows Phone Data Encryption

Well, its nothing new to be said. I was sticking my head on a encrypted sms sender app and was definitely looking for some encryption system over the internet. The thing is I knew a way around on C# as I used it way before. So, I looked it u[ and suddenly it hit me that may be that solution might not work on the silverlight core on Windows Phone 7.5. Just as it turned out I was right. So, I hooked up again on MSDN, found a blog of Rob Tiffany describing a system and I used to make my app! Smile

As I said, daily deed is a daily feed of my lookups, so don’t expect much without codes. Smile

Here’s how I encrypted the data


AesManaged aes = null;
MemoryStream memoryStream = null;
CryptoStream cryptoStream = null;
try
{

Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt), 10000);

//Create AES algorithm
aes = new AesManaged();
aes.Key = rfc2898.GetBytes(32);
//IV derived from byte array with 16 pseudo-random key bytes
aes.IV = rfc2898.GetBytes(16);

//Create Memory and Crypto Streams
memoryStream = new MemoryStream();
cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(), CryptoStreamMode.Write);

//Encrypt Data
byte[] data = Encoding.UTF8.GetBytes(dataToEncrypt);
cryptoStream.Write(data, 0, data.Length);
cryptoStream.FlushFinalBlock();

//Return Base 64 String
return Convert.ToBase64String(memoryStream.ToArray());
}
finally
{
if (cryptoStream != null)
cryptoStream.Close();

if (memoryStream != null)
memoryStream.Close();

if (aes != null)
aes.Clear();
}
}

Points to be remembered here:

    • AES is used here to encrypt and decrypt a message.
    • Salt is needed with the password to get things done and it needs at least 8 characters
    • Anybody can set the iteration at any value, minimum 1000 is preferred.
    • Use same password for encryption and decryption.
    • Code sample is taken from the respective blog. Smile

And the decryption is as followed:


public string Decrypt(string dataToDecrypt, string password, string salt)
{
AesManaged aes = null;
MemoryStream memoryStream = null;

try
{
Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(salt), 10000);

aes = new AesManaged();

aes.Key = rfc2898.GetBytes(32);
aes.IV = rfc2898.GetBytes(16);

//Create Memory and Crypto Streams
memoryStream = new MemoryStream();
CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Write);

//Decrypt Data
byte[] data = Convert.FromBase64String(dataToDecrypt);
cryptoStream.Write(data, 0, data.Length);
cryptoStream.FlushFinalBlock();

//Return Decrypted String
byte[] decryptBytes = memoryStream.ToArray();

//Dispose
if (cryptoStream != null)
cryptoStream.Dispose();

//Retval
return Encoding.UTF8.GetString(decryptBytes, 0, decryptBytes.Length);
}
finally
{
if (memoryStream != null)
memoryStream.Dispose();

if (aes != null)
aes.Clear();
}
}

And Voila! With a SmsComposerTask, my simple app looks like:
onetwothree

This is meant to be a share of my daily experience feed. So, take it easy! Hope it helps! Ciao!

Daily Deeds: Using CookieContainer in WebClient Class

Recently I decided to put stuff out on web that I actually face everyday in my part-time endeavors. I would like to keep these precise so I can write these fast enough. Smile

First of all, I’m a noob so kindly go easy on me. The point I’m putting out here is found when I was doing a pretty simple job of writing a method that checks whether a web url is valid or not. Easy at it seems the only nightmare was getting “too many automatic redirection” exception when the site seems okay in browser. I used firebug/fiddler to debug the HTTP get request  And voila! Here is the solution.

The most probable reason of this problem might be these:

1. You might need to set webRequest.AllowAutoRedirect = false where webRequest is a HttpWebRequest object

2. You might be getting redirected just because your request is missing a cookie container.

But the problem arises when Im using the WebClient class, what would I do? The solution is I’m gonna override the WebClient class and get the inner HttpWebRequest Object to make some subtle changes along with allotting a CookieContainer object. Smile

So, here’s the overridden class looks like:


public class WebClientEx : WebClient
{

private readonly CookieContainer m_container = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
HttpWebRequest webRequest = request as HttpWebRequest;
if (webRequest != null)
{
webRequest.CookieContainer = m_container;
webRequest.AllowAutoRedirect = false;
}
return request;
}
}

And using the new class is never harder than this, Smile


using (var client = new WebClientEx())
{

// fine, no content downloaded
try
{
client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0";
client.Headers[HttpRequestHeader.Accept] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

string s1 = client.DownloadString(url);

return url+" "+"exists";
}
catch (Exception ex)
{

return url+" has exception :"+ ex.Message;
}
}

And voila! It works! Hope this helps to those people who spends days on stackoverflow like me Smile