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
Registration & Breakfast
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
Managing Cloud Storage Accounts using Logic Apps
Viknaraj Manogararajah
Data visualization using Python
Sekhar Srinivasan
Going Cross platform with AR Foundation
Vivek Sharma
Keynote
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
Lunch
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
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
Tea Break
Introduction to PowerBI
Aakash Maurya
Build Advanced SPFx solutions with React and Graph API
Siddharth Vaghasia
Build Business Intelligence Analyst (BIA) Skills
Sundaram Subramanian
Deep dive of Power Platform – AI BUILDER
Prasham Sabadra
Panel 1
What's new in SharePoint development
Vipul Jain
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
Deploying serverless API's with .Net core 3.0 on AWS & Azure
Amey Vartak
Panel 3
Blockchain with .NET Core (Ark)
Anshu Kumari
Closing Note & Prize Distribution
Dev Track
Cloud Track
Architecture Track
Emerging Tech Track
Registration & Breakfast
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
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
Keynote
.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
Lunch
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
Speed up your .Net Core Website
Sourabh Somani
Azure
Magnus Mårtensson
Demystifying Open Distro for Elasticsearch
Suman Debnath
Future of Data
Shivam Ahuja
Tea Break
gRPC with C# and .Net Core
Mangesh Gaherwar
Panel 1
Essentials of Cloud security
Parveen Malik
Power platform and Dynamics 365
Deepesh Somani
Microservices - the gRPC Way
Viswanatha Swamy
Panel 2
Reserved
Reserved
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.
1, CBD, Maharaj Surajmal Road, Near Yamuna Sports Complex, Delhi, 110032
GENERAL QUERIES
Manish Tewatia
manish@csharpcon.com
+91-9718-431-042
TICKET QUERIES
Atul Gupta
conference@csharpcon.com
+91-9910-125-804