Getting Started: Document Editor with ASP.NET Core and Linux WSL Support

In this article, we will create a simple document editor application using the Document Editor component from the TX Text Control .NET Server for ASP.NET product. We will use ASP.NET Core and run the application on Linux using Windows Subsystem for Linux (WSL).

Creating the Application

Make sure that you downloaded the latest version of Visual Studio 2022 that comes with the .NET 8 SDK.

1. In Visual Studio 2022, create a new project by choosing Create a new project.

2. Select ASP.NET Core Web App (Model-View-Controller) as the project template and confirm with Next.

3. Choose a name for your project and confirm with Next.

4. In the next dialog, choose .NET 8 (Long Term Support) as the Framework and confirm with Create.

Image

Adding the Web Server Backend

5. Create a new class named TXWebServerProcess.cs and replace the content with the provided code.

using System.Diagnostics;
using System.Reflection;

public class TXWebServerProcess : IHostedService
{
    private readonly ILogger<TXWebServerProcess> _logger;

    public TXWebServerProcess(ILogger<TXWebServerProcess> logger) => _logger = logger;

    public Task StartAsync(CancellationToken cancellationToken)
    {
        try
        {
            string? path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
            string dllPath = Path.Combine(path ?? "", "TXTextControl.Web.Server.Core.dll");

            if (string.IsNullOrEmpty(path) || !File.Exists(dllPath))
                _logger.LogWarning("TX Web Server process could not be started.");
            else
            {
                Process.Start(new ProcessStartInfo("dotnet", $"&quot;{dllPath}&quot; &amp;") { UseShellExecute = true, WorkingDirectory = path });
                _logger.LogInformation("TX Web Server process started.");
            }
        }
        catch (Exception ex) { _logger.LogError(ex, "Error starting TX Web Server."); }

        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _logger.LogInformation("Stopping TX Web Server process...");
        return Task.CompletedTask;
    }
}

6. Now right-click the project in the Solution Explorer and choose Add -> Existing Item.... Navigate to the installation folder of TX Text Control .NET Server for ASP.NET.

C:\Program Files\Text Control GmbH\TX Text Control 33.0.NET Server for ASP.NET\Assembly\net8.0

Set the file filter to All Files (*.*) and select the following files:

  • TXTextControl.Web.Server.Core.deps.json
  • TXTextControl.Web.Server.Core.dll
  • TXTextControl.Web.Server.Core.Process.deps.json
  • TXTextControl.Web.Server.Core.Process.dll
  • TXTextControl.Web.Server.Core.Process.runtimeconfig.json
  • TXTextControl.Web.Server.Core.runtimeconfig.json

Confirm with Add.

7. Set the Copy to Output Directory property to Copy always for the added files.

Adding the NuGet Packages

8. In the Solution Explorer, select your project and choose Manage NuGet Packages... from the Project menu. Select Text Control Offline Packages as the Package source.

Install the following packages:

  • TXTextControl.Web
  • TXTextControl.TextControl.Core.SDK

Image

Configuring the Application

9. Open the Program.cs file located in the project's root folder.

After builder.Services.AddControllersWithViews();, add the following code:

builder.Services.AddHostedService<TXWebServerProcess>();

At the very top of the file, insert the following code:

using TXTextControl.Web;

Add the following code after the entry app.UseStaticFiles();:

// enable Web Sockets
app.UseWebSockets();

// attach the Text Control WebSocketHandler middleware
app.UseTXWebSocketMiddleware();

The overall Program.cs file should look like the provided example.

using TXTextControl.Web;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddHostedService<TXWebServerProcess>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

// enable Web Sockets
app.UseWebSockets();

// attach the Text Control WebSocketHandler middleware
app.UseTXWebSocketMiddleware();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

Adding the Control to the View

10. Find Index.cshtml in Views -> Home and replace its content with the document editor code.

@using TXTextControl.Web.MVC

@{
    var sDocument = "<html><body><p>Welcome to <strong>Text Control</strong></p></body></html>";
}

@Html.TXTextControl().TextControl(settings => {
    settings.UserNames = new string[] { "Tim Typer" };
}).LoadText(sDocument, TXTextControl.Web.StringStreamType.HTMLFormat).Render()

<input type="button" onclick="insertTable()" value="Insert Table" />

<script>
    function insertTable() {
        TXTextControl.tables.add(5, 5, 10, function(e) {
        if (e === true) { // if added
            TXTextControl.tables.getItem(function(table) {
            table.cells.forEach(function(cell) {

                cell.setText("Cell text");

            });
            }, null, 10);
        }
        })
    }
</script>

Starting the Application

11. Select WSL as the startup profile and start the application.

Image

Enable WSL (Windows Subsystem for Linux)

Follow these steps to enable WSL:

  • 1. Open PowerShell as an administrator.
  • 2. Run wsl --install to install the default Linux distribution.
  • 3. Restart your computer.

To set WSL 2 as the default version, run wsl --set-default-version 2 in PowerShell.

OSZAR »