Ask your technical questions on forums or here :
ASP.NET or MVC | C# | Windows Phone
Microsoft Technology Journals by Abhimanyu K Vatsa
HOME ABOUT RAZOR BOOK MVC ASP.NET JQUERY C# VIDEOS EBOOK ARCHIVE

17 Jun 2016

Caching in MVC with Donut Caching - excluding caching login

The main purpose of using caching is to dramatically improve the performance of your application. This is nothing but output caching that means whatever you see is cached, and exact similar things is display to everyone.

I recommend you to read Output Caching in MVC post before you read here, because you should be very careful when using any caching mechanism. Or, if you already know output caching, keep reading here only.

Biggest problem you face

If you display user login status on page which you want to cache, then you need to be careful. With output cache attribute [OutputCache(....)] caches everything on page and it will not exclude caching of some portion like login status.

In the situation, the best caching library you should use is Donut Caching (aka Donut Output Caching). Let’s understand its uses.

Using Donut Caching

The best way to add donut caching to your MVC project is to use the NuGet package. From within Visual Studio, select Tools | Library Package Manager and then choose either Package Manager Console or Manage NuGet Packages. Via the console, just type install-package MvcDonutCaching and hit return. From the GUI, just search for MvcDonutCaching and click the install button.

Excluding from being cached

The package adds several overloads to the built-in Html.Action HTML helper. The extra parameter in each overload is named excludeFromParentCache. Set this to true for any action that should not be cached, or should have a different cache duration from the rest of the page.

@Html.Action("Login", "Account", true)

Here Login is a method inside Account controller, you should define this method like:

public class AccountController : Controller
{
    [ChildActionOnly]
    public ActionResult Login()
    {
        return PartialView("_LoginPartial");
    }
}

Cache rest of the page

The package also include a DonutOutputCacheAttribute to be used in place of the built-in OutputCacheAttribute. This attribute is typically placed on every controller action that needs be be cached.

You can either specify a fixed duration:

[DonutOutputCache(Duration = "300")]
public ActionResult Index()
{
    return View();
}

Or, use a cache profile:

[DonutOutputCache(CacheProfile = "TenMins")]
public ActionResult Index()
{
    return View();
}

If you are using cache profiles, be sure to configure the profiles in the web.config. Add the following within the system.web element:

<caching>
  <outputCacheSettings>
    <outputCacheProfiles>
      <add name="TenMins" duration="400" varyByParam="*" />
    </outputCacheProfiles>
  </outputCacheSettings>
</caching>

You can also configure the output cache to use a custom provider:

<caching>
  <outputCache defaultProvider="DistributedCacheProvider">
    <providers>
      <add name="DistributedCacheProvider" type="DevTrends.Example.DistributedCacheProvider" />
    </providers>
  </outputCache>
</caching>

Note, that a custom provider is not detailed here but you can write one fairly easily by subclassing System.Web.Caching.OutputCacheProvider. A number of implementations are also available on the web.

Hope this helps.

26 Apr 2016

Credential parameter can only be used with Organization ID credentials - Azure Deployment or Continuous Deployment Error

I faced this error while Azure Web App Deployment starts in after Continuous Integration. Here's the detailed information you see in the error:

-Credential parameter can only be used with Organization ID credentials. For more information, please refer to http://go.microsoft.com/fwlink/?linkid=331007&clcid=0x409 for more information about the difference between an organizational account and a Microsoft account. There was an error with the Azure credentials used for deployment.

 Error Screenshot:


If you face this issue, here's quick way:

Step 1

Edit existing build definition and select "Azure Web App Deployment" and then click on "Manage".


Now you will be redirect on new tab.

Step 2

On new tab click on "Update service configuration" and this will open a dialog box where you need to select "Certificate Based" option and then fill up the details. You can click on "Publish settings file" to download, this file will have everything you need to fill here.


Now click on "ok" button to save changes and then fire another build and this will work now.

Hope this helps.

18 Apr 2016

Azure media services transcoding JobState.Error handling

In case you are facing error in scheduled transcoding task like the one which I can see on my dashboard (image give below):


You can use below code snippet to get more details about the error:


Here is the output after using above code snippet:



More details here: https://gist.github.com/itorian/4ac5fa723b3d5267258450a2c1a00294

Hope this helps.

13 Apr 2016

Comparing two List to find match in both list, 1st list only, 2nd list only that is Insersect, Minus and Minus Except

In this code snippet post you will learn how to compare two List<T> using lambda expressions. Below code is simple and self-explanatory if you read:

Output:

10 Mar 2016

Moving SQL Azure to local SQL or Azure SQL to VM SQL

There are many requirements like moving database between:

1. SQL Azure to local development SQL Server
2. SQL Azure to Virtual Machine SQL Server
3. Development SQL Server to Production SQL Server
4. Production SQL Server to Development SQL Server

Rename database data files and logical files in SQL Server

When I rename database using SQL Server Management Studio I always change its data files (mdf, ldf) name as well as logical file name of the resource. And this is very common need for SQL Server guy.

30 Jan 2016

Presenting session on "Building BOT on Telegram using C#" in C# Corner's Delhi Chapter

I will be attending C# Corner Delhi Chapter on 7th Feb again. I have attended this event couple of times before. This time I will be presenting Building BOT on Telegram using C#.

Why should you attend my session?

When I want to attend any session, I try to reason myself about why should I attend any particular session. Well, if you are wondering the same for me, here are my reasons for you.

  • We will have lots of fun learning something completely new
  • This session will encourage you to think out of the box
  • Only OOPS concept is required to attend this session
  • This session will be about BOT
  • This session will be about AI features
  • You will be able to write your BOT to teach, play, search, broadcast, remind, connect, integrate with other services

Date and time

Date: 7 February 2016
Time: 12:30 PM - 01:30 AM (event with other cool sessions starts at 09:30 AM)
Price: Free of cost
Where: H-217, First Floor, Sector 63, Noida, India

You should come and join other speaker's session as well starting at 09:30 AM. Read more details here http://www.c-sharpcorner.com/Events/221/delhi-chapter-meet-learn-net-C-Sharp-6-0-new-features.aspx

Hope to meet you again.


Update (08/02/2016)

Thanks everyone for joining my session. It was great talking to you and hope to see you again. As I promised, here's the source code of Telegram BOT which you can use and extend http://1drv.ms/1mlm5rE. You can implement awesome applications using this open source services from Telegram.

Some of the event pictures:

During my session


Group picture




18 Dec 2015

Self referencing loop detected for property 'xxxx' with type 'System.Data.Entity.DynamicProxies.XXX_XXX'. Newtonsoft.Json.JsonSerializationException

This is a very common serialization exception we see when forget to use loop handling strategies in Web API.

13 Dec 2015

My session on Azure Media Services in C# Corner Delhi Chapter

After I moved to Delhi, first time I got an opportunity to speak with developers in C# Corner Delhi Chapter meeting, Dinesh Beniwal is awesome guy managing community so well in Delhi. He invited me to be a part of Delhi Chapter and engage with developers and help community to grow by sharing and learning.