Real-Time Apps with Server Push
One runnable Wisej.NET 4 application per module, built from the course's lesson guide, lab guide and walkthrough
video. All seven build pieces of the same application, TicketOps Live (a Web Page Application named
TicketOpsLive with a MainPage, exactly as the lab guide asks). Each screen shows only what the module's lab guide
and walkthrough video build. Each folder has its own README.md (what to try, lab tasks → code, self-check answers);
modules whose lab or video asks for a written deliverable keep it in docs/.
Requirements: .NET 10 SDK and the Wisej-4 4.1.0 NuGet package. Nothing is deployed anywhere.
The modules
| Module | What it builds |
|---|---|
| 1 · WebSocket Push vs. Polling | live status strip + simulated heartbeat (Application.StartTask → Application.Update), in-request Refresh, a 5-step server event pushed live, an update trace, polling fallback |
| 2 · Who Owns the UI | session inspector + lifecycle logger: a per-session Application.Session counter, Application.Current captured for out-of-bound updates, ApplicationExit cleanup, a global session registry that stores no page references |
| 3 · Progress Without Refresh | background import monitor: 200 records, push every 10, cooperative cancellation, Fail at 87 button, finally restores the UI, elapsed time and a summary line with a JobId |
| 4 · When Push Is Not Enough | update-cadence panel: Wisej.Web.Timer refresh at 250 ms / 1 s / 5 s, model events faster than the UI, dirty-flag coalescing, overlap guard, polling start/stop with live mode |
| 5 · Live Ticket Board | DataGridView bound through BindingSource to a BindingList<Ticket>, rows added and updated in place, selection preserved, "updated" marker, conflict warning, Escalated filter |
| 6 · From One Session to Many | global TicketHub singleton (thread-safe, snapshots, TicketChanged with tenant metadata) feeding many sessions through Application.Update(context, …), tenant filtering, per-session notification count, unsubscribe on exit |
| 7 · Production Review (capstone) | the complete TicketOps Live: status strip, session diagnostics, import monitor, cadence controls, ticket board, TicketHub, real-time health panel (push vs fallback), Default.json / HealthCheck.json review, production checklist, demo script |
Run any module from its TicketOpsLive project folder. The projects multi-target net10.0-windows and net10.0,
so dotnet run needs a framework (-f net10.0, or -f net10.0-windows), e.g.
cd "LearnWisej-Samples/Real-Time Server Push Course/Module 3/TicketOpsLive"
dotnet run -f net10.0 --urls http://localhost:5303
or open the TicketOpsLive.slnx in the module folder with Visual Studio and press F5.
To see the polling fallback in any module, add "enableWebSocket": false to the module's Default.json and
restart: Application.IsWebSocket stays false, the samples request StartPolling(1000) while a task runs and the
browser console shows one Wisej: Poll request. per second. Multi-session modules (2, 6, 7) are meant to be opened in
two or three browser tabs at once.