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
Mastering Distributed Transactions with System.Transactions in .NET
Distributed transactions sit at the heart of any system that must keep data consistent across more than one store. In a typical enterprise application you might write to SQL Server, then push a message to a queue, then call a partner API, and expect all three steps to either succeed together or roll back together. The .NET Framework shipped a dedicated namespace, System.Transactions, precisely to make those guarantees practical without forcing every developer to think about XA openers, recovery logs and phase boundaries. When that layer is configured correctly, business code stays clean; when it is misconfigured, the same code produces silent corruption that is painful to diagnose months later.
For developers across Sydney, Melbourne, Brisbane, Perth and the regional hubs, the pressure to get this right has intensified. Major Australian banks, the Australian Taxation Office, the superannuation clearing platforms that sit behind the ASX, and the logistics stacks behind national retailers all rely on coordinated writes that span databases, message brokers and partner endpoints. A small team in Surry Hills or Docklands writing a payments microservice inherits that responsibility, which is why a working knowledge of System.Transactions remains useful even as cloud-native alternatives grow in popularity.
Foundations of Distributed Transactions in .NET
A transaction is a unit of work that follows the familiar ACID guarantees: atomicity, consistency, isolation and durability. When the work touches a single resource, the resource manager itself can honour those guarantees and developers rarely think twice. A distributed transaction, by contrast, spans two or more resource managers and needs an external coordinator to decide whether every participant commits or aborts. The standard protocol for that coordination is the two-phase commit, which begins with a prepare phase where each manager locks its data and acknowledges readiness, followed by a commit phase that finalises the decision.
System.Transactions was introduced in .NET 2.0 as a unified programming model on top of lower-level providers such as MSDTC and, later, the Lightweight Transaction Manager. Its purpose is to remove the boilerplate around manual enlistment while still exposing an escape hatch for advanced scenarios. Instead of asking developers to create OLE Transactions or XA handles directly, the framework exposes a small set of types, including Transaction, TransactionScope, CommittableTransaction and DependentTransaction, that cover almost every realistic case. Those types form the public surface that most production code interacts with, regardless of which underlying coordinator the runtime ends up selecting.
TransactionScope and the Implicit Programming Model
The TransactionScope class is the workhorse of the namespace and the one most Australian teams reach for first. You instantiate it, run the body of the work inside a using block, and call Complete only when every step has succeeded. If an exception escapes the block, or if Complete is never called, the framework aborts the transaction and the underlying resource managers undo their work. The benefit is that the code reads almost like sequential logic, even though the runtime may be coordinating multiple durable stores.
TransactionScope also enables an ambient transaction, meaning any connection opened inside the block automatically enlists with the current scope. A developer in a Brisbane-based fintech team can open a SqlConnection, send a Service Bus message and call a stored procedure on a remote linked server, and all three operations will share the same logical transaction. The implicit model is convenient, but it has subtleties. Nested scopes, async continuations and ambient flow across threads all deserve attention, which is why documentation and code reviews treat the boundaries of a TransactionScope with care. Setting TransactionScopeOption carefully and avoiding scope nesting without a clear reason are two habits that pay off the first time a production incident is traced back to a stray ambient transaction.
Lightweight Transaction Manager vs MSDTC
Behind the scenes System.Transactions chooses between two implementations: the Lightweight Transaction Manager (LTM) and the Microsoft Distributed Transaction Coordinator (MSDTC). The LTM runs entirely in process, performs well and avoids any network round-trips. It is the default whenever the scope enlists a single durable resource, such as one SQL Server 2016 or later database. The moment a second durable resource enlists, the LTM will request a distributed transaction identifier from MSDTC and promote the scope.
| Feature | Lightweight Transaction Manager | MSDTC |
|---|---|---|
| Process boundary | Single process | Cross-machine, cross-process |
| Network traffic | None | XA prepare and commit calls |
| Configuration | Out of the box | Requires MSDTC service and firewall rules |
| Typical latency | Microseconds | Milliseconds plus network hop |
| Recovery | Built into the resource manager | Distributed recovery log and coordinator |
| When chosen | Single durable resource | Two or more durable resources, or durable plus non-durable enlistments |
Understanding the promotion boundary saves a team from the most common production surprise: a transaction that performs brilliantly in development because everything talks to one database, then suddenly degrades the day it connects to a second store and starts hitting MSDTC. Profiling tools and SQL traces make the escalation visible, and architecture reviews in Melbourne user groups frequently cite that gap between local and integrated environments.
Promotion, Escalation and Resource Managers
Promotion is the act of handing an in-progress transaction from the LTM to MSDTC so that more participants can join. It is triggered by the framework, not by the developer, and it usually happens silently. The common triggers include opening a second SqlConnection inside the same scope, enlisting an explicit resource manager such as a WebSphere MQ queue, or calling EnlistDurable on a custom resource manager. Once a transaction is promoted, it stays promoted until it commits or aborts, which means a single second connection can change the lifetime cost of an entire workflow.
Resource managers are the durable endpoints that participate in the protocol. SQL Server, Oracle, Azure Service Bus and a handful of other technologies ship with their own resource managers, while teams that need to wrap a legacy mainframe link or a file-based queue can implement IEnlistmentNotification and provide their own. Australian teams that maintain payroll integrations with legacy IBM systems in Perth often rely on these custom enlistments to keep the mainframe step inside the same atomic boundary as the SQL Server write that feeds it. The trade-off is that custom resource managers inherit responsibility for recovery, so writing them well requires a clear understanding of the two-phase protocol and the in-doubt callback contract.
Handling Failures, Retries and Idempotency
Distributed transactions are fragile by nature because more moving parts means more ways to fail. A network blip during the prepare phase, a deadlock on the second database, or a queue that returns a transient timeout can all leave the coordinator unsure of the final state. Recovery is automatic in well-configured environments: when MSDTC comes back online it replays its log and resolves any in-doubt transactions, but the calling application still sees an exception and must decide whether to retry. Without a clear policy, retries pile up, queues overflow, and what looked like a small hiccup becomes an outage.
Idempotency is the property that makes retry safe. Each operation inside a transaction must produce the same effect whether it is executed once or many times, which is why database writes typically rely on natural keys or upsert statements and why messages usually carry a deduplication identifier. Australian developers working on ATO integrations, where retry storms during BAS season are notorious, lean heavily on idempotency tokens and pattern-based deduplication to keep the system stable under load. Compensation patterns complement this approach by recording what was attempted so that a subsequent manual or automated process can undo the partial work if the recovery log itself fails. The combination of idempotent steps, transient-fault retry policies and clear compensation is what separates a robust distributed transaction from a brittle one.
Modern Patterns with Cloud and Microservices
Cloud platforms and microservice architectures have reshaped how teams think about transactions. Many Azure services, including Azure SQL, Service Bus and Cosmos DB, support transactional outbox patterns and saga coordinators that push the boundary away from a single heavyweight scope. The classic two-phase commit still has its place, especially when the participants are mature enterprise systems with strong ACID support, but greenfield designs in Sydney and Melbourne increasingly favour eventual consistency, choreography and compensating actions over a single System.Transactions boundary.
Even so, the namespace remains a useful tool in a modern toolbox. A service that needs atomic writes across a relational database, an on-premises mainframe and a Kafka topic can still benefit from TransactionScope, and the pattern is well documented in training material covered at events such as the csharpcon event site. The skill is knowing when to reach for it, when to substitute a saga, and how to instrument the choice so that the next on-call rotation in Adelaide or Hobart understands the trade-off that was made.
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