From WinForms to the Web
Have a legacy WinForms desktop app you can't afford to rewrite? Wisej.NET lets you bring it to the browser while reusing most of your existing C#. This advanced course walks the full migration of the LegacyOrderDesk project — from first audit to a deployed, multi-user web app. Seven modules start with migration discovery and risk mapping, then project conversion and Wisej.NET startup, forms and modal workflows, and the critical shift from desktop assumptions to sessions, statics, user context and multi-user safety. You'll modernize data access and the DataGridView, handle files, reports and Office automation within browser boundaries, and finish with responsive UI, security, deployment and a capstone. It's built for experienced .NET developers responsible for modernizing a real desktop codebase.
Port a legacy WinForms desktop app to the browser with Wisej.NET — reuse your C#, replace desktop boundaries, make it multi-user safe, and ship it, on the LegacyOrderDesk migration project.
- Level: Advanced
- Duration: 9h
- Modules: 7
Curriculum
Module 1: Migration Discovery and Risk Mapping
Module 1 of From WinForms to the Web — the Wisej.NET migration track. Read the lesson guide and the lab / exam guide, watch the Assess a WinForms App and Build a Migration Backlog walkthrough, pass the knowledge check, then complete the hands-on lab on your own WinForms migration.
- ReadingLesson Guide · 14 min
Assess a WinForms application and produce a realistic migration backlog before changing code. Why it matters, the core reading, and the learning objectives — read this before the lab.
- ReadingLab / Exam Guide · 10 min
What you'll build in the hands-on lab, the lab steps, and how to verify the migrated workflow.
- Video lessonAssess a WinForms App and Build a Migration Backlog · 15 min
Walk through a real assessment of a small WinForms order-entry project and turn it into a migration backlog. A guided Module 1 walkthrough you can run right here in the player.
Narration transcript
Assess LegacyOrderDesk before converting its forms. The goal is to preserve useful behavior while relocating it into a shared server environment, which changes assumptions beyond the appearance of the screen.
Compare one desktop executable per user with many sessions in one server process. Each session needs its own interface and user state even though the application now shares infrastructure.
Inventory each form together with its data, dialogs, files, reports, and static state. Recording dependencies and risk exposes difficult browser boundaries before conversion effort hides them.
Assign a migration strategy to each screen instead of starting with whichever looks easiest. Direct conversion, adaptation, redesign, and deferral represent different amounts of required behavioral change.
Separate reusable order calculations from machine-dependent plumbing. Shared current-user fields, local paths, and desktop spreadsheet automation become explicit migration tasks because their old environment no longer exists.
Choose a small vertical slice that crosses real boundaries. Including startup, identity, editing, data, reporting, and deployment tests the migration approach instead of demonstrating only an isolated form.
Run the original workflow beside the browser version, then introduce a second session. Concurrent users expose shared-state mistakes that a convincing single-user demonstration can easily conceal.
Observe what reuse makes possible after the move. Existing business logic can support a shared operations dashboard with indicators and live data once session ownership is correct.
Produce the assessment workbook and justify the first slice. Its value lies in exposing a genuine browser boundary early, giving later conversion work a representative test of risk.
- ReadingAI Coding Exercise · 20 min
Build this module's OrderDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 1 Knowledge Check · 10 min · Pass mark 80%
- Hands-on labLab — Migration Assessment Workbook · 45 min
Objective: Create a migration assessment workbook for the WinForms application you are migrating (LegacyOrderDesk in the course examples) and rank its screens by effort and risk. Reuse the C# business logic, replace desktop boundaries with web-safe patterns, and prove the migrated workflow in the browser.
Module 2: Project Conversion and Wisej.NET Startup
Module 2 of From WinForms to the Web — the Wisej.NET migration track. Read the lesson guide and the lab / exam guide, watch the Port the First Form into a Wisej.NET Shell walkthrough, pass the knowledge check, then complete the hands-on lab on your own WinForms migration.
- ReadingLesson Guide · 14 min
Convert or recreate the project shell so a migrated form can run in the browser. Why it matters, the core reading, and the learning objectives — read this before the lab.
- ReadingLab / Exam Guide · 10 min
What you'll build in the hands-on lab, the lab steps, and how to verify the migrated workflow.
- Video lessonPort the First Form into a Wisej.NET Shell · 15 min
Record a clean first port: create branch, convert project, add Startup/Program files, replace namespaces, run the first form. A guided Module 2 walkthrough you can run right here in the player.
Narration transcript
Create the Wisej.NET application shell before moving the first form. Understanding its startup structure gives compiler errors and runtime behavior a clear place to be investigated.
Use the clean-shell approach shown here to keep the desktop build available. Moving forms incrementally makes comparison possible while the browser application gains its required hosting structure.
Identify the page, configuration, startup code, and package reference by responsibility. Together they establish the hosted application's entry point, replacing the desktop assumption that one process opens one main form.
Move the screen to the Wisej.NET web control model while preserving its event handlers and business rules. Familiar interactions can survive even though the application's lifetime and host have changed.
Wire startup through the web host and configure the initial window. The host now starts and routes the application; a desktop Application.Run call no longer owns that responsibility.
Open OrdersPage in the Designer and inspect the migrated layout, grid, and buttons. The generated designer file should still describe the interface that your handwritten behavior expects.
Group compiler errors by cause, fix them, and rebuild. Reaching zero errors establishes that the page can run, but browser workflows and shared-session assumptions still need separate validation.
Finish with one migrated form launching in the Wisej.NET shell. This working entry point becomes the foundation for adapting navigation, sessions, data, and browser boundaries in later modules.
- ReadingAI Coding Exercise · 20 min
Build this module's OrderDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 2 Knowledge Check · 10 min · Pass mark 80%
- Hands-on labLab — First Form Port & App Shell · 45 min
Objective: Migrate the first form into a Wisej.NET app shell, run it, and document each compiler error category. Reuse the C# business logic, replace desktop boundaries with web-safe patterns, and prove the migrated workflow in the browser.
Module 3: Forms, Navigation, Layouts, and Modal Workflow
Module 3 of From WinForms to the Web — the Wisej.NET migration track. Read the lesson guide and the lab / exam guide, watch the Forms, Navigation, Layout & Modal Workflow walkthrough, pass the knowledge check, then complete the hands-on lab on your own WinForms migration.
- ReadingLesson Guide · 14 min
Preserve the WinForms user workflow while adapting desktop UI patterns to browser behavior. Why it matters, the core reading, and the learning objectives — read this before the lab.
- ReadingLab / Exam Guide · 10 min
What you'll build in the hands-on lab, the lab steps, and how to verify the migrated workflow.
- Video lessonForms, Navigation, Layout & Modal Workflow · 15 min
Show a WinForms workflow ported to Wisej.NET with navigation, modal edit dialog, validation, and disposal. A guided Module 3 walkthrough you can run right here in the player.
Narration transcript
Preserve the order-editing workflow while adapting how the browser presents it. Navigation, modal decisions, and simple confirmations have different interaction needs even when their underlying business logic is unchanged.
Use the familiar event model to carry behavior across, then reassess the workflow. A form that converts successfully can still impose unnecessary interruptions on someone using it in a browser.
Check layout, docking, and keyboard order in the Designer. Keep migration behavior in handwritten partial-class code so later designer regeneration does not overwrite those changes.
Dispose modal dialogs explicitly after use because closing does not automatically release them. If a dialog is deliberately reused, reset its state before the next interaction.
Reserve blocking messages for decisions that require an answer. A saved confirmation can use a non-blocking notification, allowing the user to continue without dismissing another dialog.
Port the edit dialog as a Wisej.NET form with its existing result contract. The caller displays it, reads the outcome, and owns disposal so its lifetime remains explicit.
Follow the complete edit sequence: open from a row, save, release the dialog, and notify. The final notification confirms success without extending the modal interruption.
Deliver navigation, list, and edit dialog as one working flow. Verify disposal and the non-blocking confirmation together so the migrated interaction is both usable and properly cleaned up.
- ReadingAI Coding Exercise · 20 min
Build this module's OrderDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 3 Knowledge Check · 10 min · Pass mark 80%
- Hands-on labLab — Navigation, Layout & Modal Workflow · 45 min
Objective: Port navigation and three screens, then replace one unnecessary MessageBox with a non-blocking notification. Reuse the C# business logic, replace desktop boundaries with web-safe patterns, and prove the migrated workflow in the browser.
Module 4: Sessions, Statics, User Context, and Multi-User Safety
Module 4 of From WinForms to the Web — the Wisej.NET migration track. Read the lesson guide and the lab / exam guide, watch the Sessions, Statics & Multi-User Safety walkthrough, pass the knowledge check, then complete the hands-on lab on your own WinForms migration.
- ReadingLesson Guide · 14 min
Make the migrated application safe for many simultaneous browser sessions. Why it matters, the core reading, and the learning objectives — read this before the lab.
- ReadingLab / Exam Guide · 10 min
What you'll build in the hands-on lab, the lab steps, and how to verify the migrated workflow.
- Video lessonSessions, Statics & Multi-User Safety · 15 min
Demonstrate two browser sessions corrupting shared static state, then fix it using session context. A guided Module 4 walkthrough you can run right here in the player.
Narration transcript
Look for assumptions inherited from one desktop user per process. On the web server, a static field belongs to the shared process, so its value can cross session boundaries.
Classify values by ownership before moving them. Immutable, user-independent lookups can be shared; customer selection, filters, identity, and workflow state must follow the session that owns them.
Observe one session changing the static current customer used by another. Both users address the same storage slot, which explains why the defect disappears during single-user testing.
Move personal state into the session and expose it through a typed user context. Centralizing access hides storage details and provides one clear place to reset identity-related state at logout.
Reassess registry-based preferences as another machine assumption. The server's current-user registry is not the browser user's computer, so settings need an appropriate profile, database, or browser store.
Repeat the filter change with two sessions active. Independent results demonstrate that callers now read their own context instead of the shared field that caused the leak.
Refactor the discovered static user values into session-aware services and test them concurrently. The migration is validated by isolation between two users, not merely by one screen behaving correctly.
- ReadingAI Coding Exercise · 20 min
Build this module's OrderDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 4 Knowledge Check · 10 min · Pass mark 80%
- Hands-on labLab — Sessions & Multi-User Safety · 45 min
Objective: Find and refactor shared static user state in your WinForms application into a session-aware context service. Reuse the C# business logic, replace desktop boundaries with web-safe patterns, and prove the migrated workflow in the browser.
Module 5: Data Access, DataGridView, Validation, and Performance
Module 5 of From WinForms to the Web — the Wisej.NET migration track. Read the lesson guide and the lab / exam guide, watch the DataGridView, Validation & Performance walkthrough, pass the knowledge check, then complete the hands-on lab on your own WinForms migration.
- ReadingLesson Guide · 14 min
Port the data-heavy parts of a WinForms application without creating slow or chatty browser screens. Why it matters, the core reading, and the learning objectives — read this before the lab.
- ReadingLab / Exam Guide · 10 min
What you'll build in the hands-on lab, the lab steps, and how to verify the migrated workflow.
- Video lessonDataGridView, Validation & Performance · 15 min
Migrate a data-bound WinForms grid and then optimize it using virtual rows and server-side filtering. A guided Module 5 walkthrough you can run right here in the player.
Narration transcript
Port the orders screen with network and session costs in mind. Reusing its data logic is useful, but a browser grid should not reproduce every desktop loading assumption.
Inspect the cost of loading all records before display. Data now crosses a network and consumes resources per session, so the old local-network shortcut can create slow rendering for every user.
Combine deliberate filtering and sorting on the server with virtual rows and incremental scrolling. Each technique reduces work or data needed before the user can interact with the relevant results.
Keep validation rules on the server and separate them from the form. The same rule can then protect dialog edits, imports, and service callers while producing useful field-level feedback.
Add the filter toolbar and grid enhancements after basic binding works. This keeps the data connection understandable while introducing controls that limit and explain the displayed result set.
Compare the unfiltered two-hundred-thousand-row load with the filtered virtual version. The improvement comes from asking the interface to handle less work, while preserving the screen's purpose.
Deliver the grid with server filtering, virtual rows, and shared validation. Test both its response over the network and its refusal of invalid data, since speed alone does not prove correctness.
- ReadingAI Coding Exercise · 20 min
Build this module's OrderDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 5 Knowledge Check · 10 min · Pass mark 80%
- Hands-on labLab — Data Grid, Validation & Performance · 45 min
Objective: Port a customer/order grid, add validation, and replace full-table loading with an incremental or virtualized pattern. Reuse the C# business logic, replace desktop boundaries with web-safe patterns, and prove the migrated workflow in the browser.
Module 6: Files, Reports, Office Automation, and Browser Boundaries
Module 6 of From WinForms to the Web — the Wisej.NET migration track. Read the lesson guide and the lab / exam guide, watch the Files, Reports & Browser Boundaries walkthrough, pass the knowledge check, then complete the hands-on lab on your own WinForms migration.
- ReadingLesson Guide · 14 min
Replace desktop file, registry, report, and Office assumptions with browser/server-safe workflows. Why it matters, the core reading, and the learning objectives — read this before the lab.
- ReadingLab / Exam Guide · 10 min
What you'll build in the hands-on lab, the lab steps, and how to verify the migrated workflow.
- Video lessonFiles, Reports & Browser Boundaries · 15 min
Show file access before/after migration, including upload, generated PDF, download link, and a queued report. A guided Module 6 walkthrough you can run right here in the player.
Narration transcript
Revisit every operation that assumes access to the user's disk or installed Office programs. After migration, the same server-side file call addresses the server's environment, not the browser's computer.
Use upload and download to cross the browser boundary deliberately. Direct server file access remains appropriate for server templates and exports, but it cannot represent a path on the user's drive.
Classify each existing path by where the bytes belong and how they move. Choose server storage, upload, download, supported client access, or redesign before replacing platform-specific path construction.
Replace desktop Office automation with libraries suitable for server execution. Queue demanding report work so concurrent users do not accidentally require an unlimited number of heavy reports at once.
Trace each replacement end to end: upload into configured storage, generate exports with a managed library, and download them. Generate report documents on the server before displaying them in the viewer.
Follow an upload through server processing to the report viewer, then involve another session. The queue and separate users demonstrate that the workflow handles shared-server execution rather than one desktop's resources.
Deliver upload, export, and queued reporting as complete browser workflows. Verify that none depends on a user's local path or a desktop Office process running on the server.
- ReadingAI Coding Exercise · 20 min
Build this module's OrderDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 6 Knowledge Check · 10 min · Pass mark 80%
- Hands-on labLab — Files, Reports & Browser Boundaries · 45 min
Objective: Replace a desktop export-to-Excel workflow with a server-generated file and browser download; add a queued report job. Reuse the C# business logic, replace desktop boundaries with web-safe patterns, and prove the migrated workflow in the browser.
Module 7: Modernization, Responsive UI, Security, Deployment, and Capstone
Module 7 of From WinForms to the Web — the Wisej.NET migration track. Read the lesson guide and the lab / exam guide, watch the Modernize, Secure & Deploy the Capstone walkthrough, pass the knowledge check, then complete the hands-on lab on your own WinForms migration.
- ReadingLesson Guide · 14 min
Turn the working port into a polished, secure, deployable Wisej.NET web application. Why it matters, the core reading, and the learning objectives — read this before the lab.
- ReadingLab / Exam Guide · 10 min
What you'll build in the hands-on lab, the lab steps, and how to verify the migrated workflow.
- Video lessonModernize, Secure & Deploy the Capstone · 15 min
Polish and deploy the migrated application: theme, responsive profile, security review, publish, and handoff. A guided Module 7 walkthrough you can run right here in the player.
Narration transcript
Turn the working migration into an application ready for real use. Modernization, responsive layout, security, and deployment build on proven workflow parity rather than replacing the need to establish it.
Use themes, clearer labels, watermarks, tool buttons, and notifications to improve existing forms. These changes can make the interface easier to understand without rewriting its business behavior.
Define which desktop, tablet, and phone profiles you support, then test their layouts. Responsive behavior is a deliberate design choice, and untested mobile screens should not be presented as supported.
Review the migrated program as a web application. Authentication, validation, encoding, protected downloads, session lifetime, and auditing must cover the new boundaries exposed by browser access.
Include hosting and recovery in the deliverable. Confirm affinity, configuration, diagnostics, backup, and rollback on the chosen target, with two sessions proving that deployment preserves user isolation.
Compare the modernized workflow with the original behavior already validated. The same business logic now operates with responsive presentation, encrypted transport, and server-side authentication around it.
Inspect the shared dashboard as the result of the migration decisions. Indicators, order summaries, and audited activity become useful to multiple users because the underlying workflow and ownership survived the move.
Present what was reused, adapted, and modernized, then state remaining risks and the next slice. This makes the completed migration review actionable instead of implying every future screen is already solved.
- ReadingAI Coding Exercise · 20 min
Build this module's OrderDesk sample with ChatGPT or Claude from a ready-made prompt that points the model at this module's specification, then review, run and extend what it gives you — including against our own reference build on GitHub.
- Knowledge checkModule 7 Knowledge Check · 10 min · Pass mark 80%
- Hands-on labLab — Modernize, Secure & Deploy (Capstone) · 45 min
Objective: Finish the capstone: migrate the app, modernize one screen, run security/deployment checks, and present the migration report. Reuse the C# business logic, replace desktop boundaries with web-safe patterns, and prove the migrated workflow in the browser.