New to site?


Lost password? (X)

Already have an account?


(X)

Presents

#CSHARPCON20

The C# Corner Annual Conference 2020 is a three-day annual event for software professionals and developers.

3
DAYS
72
SPEAKERS
65
SESSIONS

Magnus Mårtensson
Microsoft Regional Director, Azure MVP, CEO Loftysoft

Avirag Jain
Director & CTO R Systems

Mahesh Chand
Founder C# Corner, CEO Mindcracker

Chris Gali
CEO & Co-Founder Graphite

Subinder Khurana
Chief Architect StoryProcess, Founder NASSCOM DeepTech Club

Bryan Rishforth
Investor, Chairman Graphite

Bryn Everson
Director Biz Dev Graphite

Raj Tiwari
Digital Transformation Leader, Futurist and Visionary

Joseph Guadagno
Microsoft MVP, Lead Quicken Loans

Nikita Sachdev
Entrepreneur, Blockchain Enthusiast & Advisor, Social Media Influencer

Doug Wagner
COO & Founder Adapt Technical Group

Ritesh Modi
Architect, Senior Evangelist, Cloud Architect

Crystal Wenrick
Director Communications Mindcracker

Allen O’Neill
Microsoft MVP, Consulting Engineer/Architect

Praveen Kumar
CEO MCN Solutions

Chris Love
Founder Love2Dev, Microsoft MVP, Author

Sanjay Vyas
Microsoft Regional Director, Microsoft MVP, Founder & CEO SkillLabs Technologies

Veena Sarda
Deep Learning Consultant, Author

Sekhar Srinivasan
C# Corner MVP, Microsoft Certified Trainer, Pluralsight Author

Lalit Bansal
Founder & CEO - EIY SYS

Navdeep Garg
CEO Revinfotech

Prakash Tripathi
Tech Manager/Leader, Microsoft MVP, Blogger

Bhavna Jain
Breakthrough Consultant

Naveen Sharma
Enterprise Architect, Leadership Coach, Author

Vidya Vrat Agarwal
Principal Architect, Microsoft MVP, Author

Sheetal Agarwal
Founder Clownselors, Medical Clown, Trainer

Abhishek Kant
Founder GTM Catalyst

Vishnu Saran
Founder & CEO VoiceQube

Sandeep Soni
Founder & CEO Deccansoft, Microsoft Certified Trainer

Parveen Malik
AVP InfoSec & Vulnerability Management, Information Security Expert

Nitin Pandit
Microsoft MVP, Developer Evangelist, Author

Niloshima Srivastava
C# Corner MVP, Tech Architect, Trainer, Blogger

Bala Chirtsabesan
Senior Software Engineer at Microsoft, Author

Manoj Mittal
Sr. Technical Architect, C# Corner MVP, Author

Chandni Di
Co-Founder Voice of Slum

Vithal Wadje
Technical Lead, Microsoft MVP, Author

Shivam Ahuja
Founder SkillCircle, Business Mentor

Chervine Bhiwoo
Solution Architect, Microsoft MVP, Author

Saurabh Jain
Vice President Paytm, Founder Fun2Do Labs, Author

Vinay Solanki
Head IoT at Lenovo, Founder IoT-NCR

Anshu kumari
Founder Blockchainkids, Inventor, Trainer

Amit Singal
CEO Startup Buddy

Dev Pratap
Co-Founder & CEO Voice of Slum

Amey Vartak
Technology Consultant, Full Stack Developer, C# Corner MVP, Author

Viswanatha Swamy
Principal Software Engineer, C# Corner MVP, Author

Sanket Verma
Research Engineer @ Ballistics (Forensics) and Chair, PyData Delhi

Sourabh Somani
Lead Developer, Microsoft MVP, Author

Abhishek Mishra
Software Architect, C# Corner MVP, Author

Siddharth Vaghasia
Technical Consultant, C# Corner MVP, Blogger

Bassam Alugili
Senior Software Specialist, Database Expert

S Ravi Kumar
Solution Architect, C# Corner MVP, Author

Sundaram Subramanian
Full Stack Developer, C# Corner MVP, Speaker

Deepesh Somani
Solution Architect, Microsoft MVP, Author

Debasis Saha
Technical Project Manager, C# Corner MVP, Blogger, Author

Vipul Jain
Software Architect, C# Corner MVP, Author

Akshay Patel
Technical Architect, Microsoft Certified Trainer, C# Corner MVP, Author

Stephen Simon
RPA Developer, Evangelist, Author

Vivek Sharma
Founder Kingster636, AR/VR Specialist

Jeetendra Gund
Technical Lead, C# Corner MVP, Author

Sujal Beniwal
AI Enthusiast, Student

M Viknaraj
Microsoft MVP, Azure Architect, Author

Prasham Sabadra
Software Architect, C# Corner MVP, Trainer, Author

Aakash Maurya
Senior Developer, C# Corner MVP, Speaker

Ankit Sharma
Senior Software Engineer, C# Corner MVP, Author

Mangesh Gaherwar
Team Lead, C# Corner MVP, Author

Viral Jain
Technical Consultant, C# Corner MVP, Author

Bhasker Das
Solution Architect, Evangelist

Manish Dwivedi
Associate Project Manager

Ck Nitin
Programmer, Author

Rohit Gupta
Technical Trainer, Author

Manish Tewatia
Full-stack Marketer, UX Designer

Bhavya Gaur
Technical Illustrator

Rohit Tomar
SEO/SMO Expert

Web Track

Cloud & Data Track

Dev Track

8am-9am

Registration & Breakfast

9am-10am

Future of Desktop Apps with JS (ElectronJs)

Nitin Pandit

Building Serverless Microservices Using Microsoft Azure

Vithal Wadje

Innovating RPA: A Robot for Every Person

Stephen Simon

10am-11am

Managing Cloud Storage Accounts using Logic Apps

Viknaraj Manogararajah

Data visualization using Python

Sekhar Srinivasan

Going Cross platform with AR Foundation

Vivek Sharma

11am-12pm

Keynote

12pm-1pm

Managing your Azure dependencies in ASP.NET Core apps using VS

Bala Chirtsabesan

Securing Applications on Intelligent Azure

Abhishek Mishra

Getting started with Blazor the Framework of Future

S Ravi Kumar

1pm-2pm

Lunch

2pm-2:45pm

Build Progressive Web Apps using Angular 9

Debasis Saha

Build and deploy to any platform using Azure DevOps

Chervine Bhiwoo

Deep Dive in Azure Service Bus

Akshay Patel

2:45pm-3:45pm

Build a Native Mobile Application using React Native and JavaScript

Joseph Guadagno

Making sense of Web Job, Web Job SDK and Functions in Azure

Prakash Tripathi

CloudFront Distribution in AWS

Viral Jain

3:45pm-4pm

Tea Break

4pm-4:30pm

Introduction to PowerBI

Aakash Maurya

Build Advanced SPFx solutions with React and Graph API

Siddharth Vaghasia

Build Business Intelligence Analyst (BIA) Skills

Sundaram Subramanian

4:30pm-5pm

Deep dive of Power Platform – AI BUILDER

Prasham Sabadra

Panel 1

What's new in SharePoint development

Vipul Jain

5pm-5:30pm

Build a SSO (Single Sign On) based Native JavaScript application with Microsoft Identity within 10 minutes

Manoj Mittal

Panel 2

Applications and working of AI

Veena Sarda

5:30pm-6pm

Deploying serverless API's with .Net core 3.0 on AWS & Azure

Amey Vartak

Panel 3

Blockchain with .NET Core (Ark)

Anshu Kumari

6pm-6:30pm

Closing Note & Prize Distribution

Dev Track

Cloud Track

Architecture Track

Emerging Tech Track

8am-9am

Registration & Breakfast

9am-10am

Creating Full-Stack Web Apps Using Server-Side Blazor

Ankit Sharma

Real time face recognition with MS Cognitive Services

Niloshima Srivastava

Building Scalable APIs with GraphQL

Jeetendra Gund

Future of development with AI and Blockchain

Navdeep Garg

10am-11am

Debugging Tips and Tricks with Visual Studio 2019

Joseph Guadagno

Azure Containers

Abhishek Kant

Enterprise Architecture

Naveen Sharma

Bot Framework - learn it fast and look like a boss!

Allen O’Neill

11am-12:30pm

Keynote

12:30pm-1:30pm

.Net Core & C# 8 Performance

David McCarter

Working with Azure kubernetes services

Ritesh Modi

Becoming an Architect

Vidyavrat Agarwal

Why Techies Need to Learn Product Management

Saurabh Jain

1:30pm-2:30pm

Lunch

2:30pm-3:30pm

Build a rules engine in .Net Core

Sanjay Vyas

Building CI and CD Pipeline using Azure DevOps

Sandeep Soni

Entity Framework Core - Tips and Tricks, Performance Optimization, and Tuning

Bassam Alugili

Hacking your way into Data Science

Sanket Verma

3:30-4:15pm

Speed up your .Net Core Website

Sourabh Somani

Azure

Magnus Mårtensson

Demystifying Open Distro for Elasticsearch

Suman Debnath

Future of Data

Shivam Ahuja

4:15pm-4:30pm

Tea Break

4:30pm-5:15pm

gRPC with C# and .Net Core

Mangesh Gaherwar

Panel 1

Essentials of Cloud security

Parveen Malik

Power platform and Dynamics 365

Deepesh Somani

5:15pm-6pm

Microservices - the gRPC Way

Viswanatha Swamy

Panel 2

Reserved

Reserved

6pm-6:30pm

Closing Note & Prize Distribution

Choosing the Right Cache for ASP.NET Core Session Data

Session state can look simple in a local ASP.NET Core application. A visitor signs in, adds an item to a basket, or completes a multi-step form, and the application remembers the relevant values between requests. The design becomes more important when the application runs across several servers, containers, or availability zones.

The main choice is usually between IMemoryCache and IDistributedCache. Both can store short-lived data, yet they offer very different guarantees around availability, consistency, scaling, and operational complexity. The best option depends on whether session data must survive requests reaching different application instances.

For an Australian business, deployment location can also influence the decision. An application hosted in an Azure Australia East or Australia Southeast region may need predictable latency, data residency controls, and a failure plan that works during busy periods such as end-of-financial-year processing or major retail campaigns.

Using IMemoryCache vs IDistributedCache for Session Data in ASP.NET Core requires a distinction between a fast local cache and a shared session store. Understanding that distinction prevents a common production problem: an application that works perfectly on a developer laptop but loses state after load balancing or a container restart.

Capability IMemoryCache IDistributedCache
Storage location Memory inside one application process Shared external or coordinated backing store
Works across instances No, unless traffic is pinned to one instance Yes, when all instances use the same provider
Speed Very high, with no network hop Slightly slower because requests cross a network or provider boundary
Survives process restart No Usually, depending on provider and expiry settings
Typical providers Built-in process memory Redis, SQL Server, PostgreSQL, NCache, or another implementation
Best fit Local cache entries and single-instance workloads Session state and shared application data

How the two cache abstractions differ

IMemoryCache stores values in the memory allocated to the current .NET process. It is straightforward to register with dependency injection and is very fast because reads and writes avoid serialisation and network communication. It is well suited to data that can be recreated, such as configuration lookups, product metadata, or a calculated response used by one application instance.

Its scope is also its limitation. When a load balancer sends the next request to another instance, that instance has a different memory cache. A restart, deployment, scale-out event, or process crash clears the entries. Even a single virtual machine can have several worker processes, each with its own cache.

IDistributedCache defines a common API for a shared cache provider. ASP.NET Core can use Redis, SQL Server, PostgreSQL, NCache, or a custom implementation behind the same abstraction. The application pays a small performance cost for the shared store, but every web node can retrieve the same session value.

A key detail is that AddDistributedMemoryCache() does not create a distributed cache. It registers an in-memory implementation of IDistributedCache, useful for development and simple single-server deployments. The interface name does not change the storage behaviour.

Why session data needs shared storage

ASP.NET Core session middleware stores a session identifier in a cookie and keeps the associated values in an IDistributedCache implementation. This design allows multiple application instances to handle requests for the same visitor, provided they share the same backing store and configuration.

An IMemoryCache entry can support session-like behaviour in a small internal tool, but it does not provide reliable cross-instance session state. Sticky sessions can keep a visitor attached to one server, yet they reduce routing flexibility and can create uneven load. They also fail to solve data loss after that server is recycled.

Shared storage is especially relevant for applications hosted in Sydney and Melbourne regions with multiple instances behind Azure App Service, a reverse proxy, or Kubernetes. A user might submit a form through one pod and retrieve the next step through another. If the state exists only in local memory, the second request may appear to start a new session.

Session should still contain only modest, temporary data. Store an identifier, selected preferences, or a small workflow state rather than a complete customer record. Large values increase serialisation time, network traffic, and pressure on the backing service.

Selecting a provider for a distributed cache

Redis is a common choice when low-latency session access, expiry policies, and high throughput matter. Azure Cache for Redis can provide a managed option, while self-hosted Redis may suit teams with existing platform expertise. A production design should account for connection resilience, TLS, access keys or managed identity, capacity limits, and what happens if Redis becomes unavailable.

SQL Server and PostgreSQL providers can be practical where the organisation already operates a relational database and wants fewer infrastructure components. They may be easier to govern in a heavily regulated environment, but session traffic can compete with business queries. Database-backed caching also needs suitable indexes, cleanup behaviour, connection pooling, and monitoring.

Australian organisations often assess whether customer information remains within an Australian cloud region. That requirement may arise from contractual obligations, internal policy, or the Privacy Act context rather than from a single universal rule. Confirm the provider’s region, replication model, support access, backup location, and cross-border transfer terms before placing personal information in a cache.

A cache provider is not automatically a durable system of record. Expiry, eviction, maintenance, and failover can remove data. If losing a session would cause financial or compliance harm, persist the important business transaction in a database and use the cache only to improve continuity and speed.

Configuring session state safely

A typical shared-session setup registers a concrete distributed provider, then adds session middleware:

builder.Services.AddStackExchangeRedisCache(options =>
{
    options.Configuration = builder.Configuration.GetConnectionString("Redis");
    options.InstanceName = "orders:";
});

builder.Services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(20);
    options.Cookie.HttpOnly = true;
    options.Cookie.IsEssential = true;
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
});

var app = builder.Build();

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseSession();
app.MapControllers();

Middleware order matters. Session must run after components that establish the request context it relies on and before endpoints that read or write HttpContext.Session. If authentication, consent, or custom middleware depends on session values, place those components deliberately and test the complete pipeline.

Session cookies should be protected with HTTPS, HttpOnly, an appropriate SameSite policy, and a carefully considered domain and path. Avoid putting secrets, payment details, or unnecessary personal information into session. The cookie generally carries an identifier, while the value remains in the server-side store.

Use consistent data protection keys across application instances when cookie authentication or other protected state is shared. Without a common key ring, one node may be unable to decrypt a cookie issued by another node. This can look like a cache or session fault even though the underlying problem is key management.

Handling expiration, concurrency, and failure

Every session value needs a useful lifetime. An idle timeout helps remove abandoned shopping baskets and incomplete forms, while an absolute business deadline can prevent old workflow data from being accepted. Align cache expiry with the user journey instead of choosing a long duration simply to avoid cache misses.

Concurrent requests can update the same session. Multiple browser tabs, mobile retries, AJAX calls, and slow connections may read an old value and then overwrite a newer one. Keep updates small and deliberate. For critical counters or reservations, use a transactional database operation or a provider-specific atomic command rather than relying on session as a concurrency mechanism.

Treat cache failure as an expected operational condition. Decide whether the application should show a recoverable error, begin a fresh session, or temporarily disable a workflow. A retry policy that blindly repeats every cache call can increase an outage. Use bounded timeouts, circuit breaking where appropriate, and clear user-facing behaviour.

Observability should cover cache latency, connection failures, misses, evictions, session creation, and unusually large payloads. Correlation IDs make it easier to connect an individual request with a provider error; a practical reference for extending this approach is a distributed tracing guide focused on OpenTelemetry in .NET.

Testing the design before release

A local test using AddDistributedMemoryCache() can confirm controller and middleware behaviour, but it cannot prove that the application works across nodes. Run integration tests against the same provider family used in production, including expiry, reconnect, and serialisation scenarios.

Scale tests should send a single browser session through multiple instances. Verify that a request can write state on one node and read it on another, then repeat the test during deployment, instance replacement, and provider failover. For an Australian service, include latency tests from likely users in Sydney, Melbourne, Brisbane, Perth, and regional areas where network conditions may differ.

The checks below help separate an acceptable design from a fragile one.

Architecture checks

  • Confirm every production instance uses the same distributed-cache endpoint and namespace.
  • Verify session data remains available when an instance is restarted or drained.
  • Check that cache and database regions match the organisation’s residency requirements.
  • Keep sensitive or durable business records outside session storage.

Operational checks

  • Measure hit rate, payload size, latency, timeouts, and eviction activity.
  • Test Redis or database failover with a documented recovery response.
  • Set alerts for connection failures before users report lost baskets or forms.
  • Review session expiry and cookie settings during security testing.

The choice is therefore a workload decision rather than a preference for one interface. Use IMemoryCache for disposable, process-local data where a miss is harmless. Use IDistributedCache with a real shared provider when users can move between instances or when session continuity matters.

For a single-server prototype, local memory may be sufficient. For a customer-facing application expected to scale across Australian cloud infrastructure, a managed distributed cache generally offers a more predictable foundation. Keep session small, protect it carefully, monitor its dependencies, and ensure the underlying business process can recover when temporary state disappears.

The Leela Ambience Convention Hotel

1, CBD, Maharaj Surajmal Road, Near Yamuna Sports Complex, Delhi, 110032

KNOW MORE

GENERAL QUERIES


Manish Tewatia

+91-9718-431-042

TICKET QUERIES


Atul Gupta

+91-9910-125-804