Verwendung von Office-Interop in Web-Projekt mit SignalR

Gepostet von Eric am 17.11.2020

ASP.NetCore OfficeInterop SignalR

Was ist SignalR?

SingalR ist eine Technologie von Microsoft. Sie erlaubt einem Server (SignalR-Hub), eine Nachricht (SignalR-Befehl) asynchron an den Client zu senden. So kann der Client in Echtzeit Informationen des Servers erhalten. SignalR kümmert sich dabei um die komplette technische Ausführung.

Die Anforderung

Das Web-Projekt eines Kunden verfügt über ein Frontend, das mit React/NextJS erstellt wurde. Das Backend wurde in .Net Core (C#) implementiert. Das Frontend kommuniziert über REST mit dem Backend, das zusätzlich ein SignalR-Hub implementiert hat. Dadurch ist es möglich, dass zeitlich unabhängig Informationen an das Frontend gesendet werden können wie z. B. die Info, dass die Erstellung eines Dokuments abgeschlossen ist.

Bei diesem Projekt ist es für den Benutzer erforderlich, dass (Office-)Dokumente geöffnet und geändert werden können. Die Änderungen sollen direkt im System gespeichert werden.

Die Lösung: «Connector»

Die Lösung dafür ist ein zusätzliches Programm (genannt «Connector») auf dem PC des Benutzers, das mittels SignalR Informationen mit dem Backend und dem Frontend austauscht. Der «Connector» kümmert sich nur um die Interoperabilität mit den Office-Programmen.

Der Ablauf in acht Schritten

Im Folgenden finden Sie eine kompakte Beschreibung des Ablaufs:

  1. Der Benutzer ruft im Browser einen Button zu einem Dokument auf, das er bearbeiten möchte.
  2. Das Frontend macht eine Anfrage an die API im Backend, dass der Benutzer das Dokument öffnen will.
  3. Das Backend sendet ein SignalR-Command mit der Id des gewünschten Dokuments.
  4. Der «Connector» empfängt diese Information und lädt das Dokument mit einem Aufruf der API vom Backend. Das Dokument wird mit der Office-Interop-Schnittstelle geöffnet, wobei der «Connector» sich in den Close-Event des Office-Programms registriert.
  5. Der Benutzer macht Änderungen im Dokument und schliesst dieses wieder.
  6. Der «Connector» bekommt den Close-Event und schickt das geänderte Dokument mit einem API-Aufruf an das Backend.
  7. Das Backend speichert das Dokument und teilt in einem SignalR-Befehl mit, dass das Dokument aktualisiert wurde.
  8. Das Frontend empfängt den SingalR-Befehl und aktualisiert die UI, damit das geänderte Dokument dort sichtbar ist.