diff --git a/F4SDM42WebApi/F4SD - M42WebApi.csproj b/F4SDM42WebApi/F4SD - M42WebApi.csproj
index 9de7a57..31a6d7b 100644
--- a/F4SDM42WebApi/F4SD - M42WebApi.csproj
+++ b/F4SDM42WebApi/F4SD - M42WebApi.csproj
@@ -13,7 +13,7 @@
false
6673a25d-33d6-4072-91d9-abed4be1a966
C4ITF4SD*.*
- 1.4.0.35
+ 1.4.0.36
true
diff --git a/F4SDM42WebApi/F4SDHelperService.cs b/F4SDM42WebApi/F4SDHelperService.cs
index 617dbee..a5280e6 100644
--- a/F4SDM42WebApi/F4SDHelperService.cs
+++ b/F4SDM42WebApi/F4SDHelperService.cs
@@ -1411,10 +1411,6 @@ namespace C4IT.F4SD
LogEntry($"{entries.Count} Journal entries found for ObjectID={activityEOID}", LogLevels.Debug);
return CreateTicketJournalItems(activityEOID, entries);
}
- catch (MissingMethodException E)
- {
- return F4SDM42WebApiController.CreateMissingMethodDiagnostics("GetJournalEntries helper", activityEOID, E);
- }
catch (Exception E)
{
LogException(E);
diff --git a/F4SDM42WebApi/F4SDM42WebApiController.cs b/F4SDM42WebApi/F4SDM42WebApiController.cs
index e4d50d5..9549eed 100644
--- a/F4SDM42WebApi/F4SDM42WebApiController.cs
+++ b/F4SDM42WebApi/F4SDM42WebApiController.cs
@@ -5,7 +5,6 @@ using System.Linq;
using System.Net;
using System.Net.Http;
using System.Reflection;
-using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -65,7 +64,6 @@ namespace C4IT.F4SD
{
try
{
- //System.Diagnostics.Debugger.Launch();
lock (initLock)
{
if (IsInitialized || F4SDM42LogsWebApiController.IsInitialized)
@@ -141,80 +139,7 @@ namespace C4IT.F4SD
[Route("getTicketHistory"), HttpGet]
public async Task> getTicketHistory(Guid objectId)
{
- try
- {
- return await _f4stHelperService.GetJournalEntries(objectId);
- }
- catch (MissingMethodException ex)
- {
- return CreateMissingMethodDiagnostics("getTicketHistory controller", objectId, ex);
- }
- }
-
- internal static List CreateMissingMethodDiagnostics(string stage, Guid objectId, MissingMethodException ex)
- {
- var details = BuildMissingMethodDiagnostic(stage, objectId, ex);
- LogEntry(details, LogLevels.Warning);
-
- return new List
- {
- new cTicketJournalItem
- {
- ActivityObjectId = objectId,
- CreatedBy = "C4ITF4SDM42WebApi",
- CreationDate = DateTime.Now,
- Header = "MissingMethodException diagnostic",
- Description = details,
- DescriptionHtml = WebUtility.HtmlEncode(details).Replace(Environment.NewLine, "
"),
- IsVisibleForUser = false
- }
- };
- }
-
- private static string BuildMissingMethodDiagnostic(string stage, Guid objectId, MissingMethodException ex)
- {
- var builder = new StringBuilder();
- builder.AppendLine($"Stage: {stage}");
- builder.AppendLine($"ObjectId: {objectId}");
- builder.AppendLine(ex.ToString());
- builder.AppendLine("Loaded assemblies:");
-
- var assemblyNames = new HashSet(StringComparer.OrdinalIgnoreCase)
- {
- "C4ITF4SDM42WebApi",
- "C4ITF4SDM42WebApiHelper",
- "Matrix42.Common",
- "Matrix42.Common.Html",
- "Matrix42.Contracts.Platform",
- "Matrix42.Contracts.ServiceManagement",
- "Matrix42.ServiceManager.BizLogic",
- "Matrix42.BizLogic.Journal",
- "Newtonsoft.Json",
- "System.Net.Http.Formatting",
- "update4u.SPS.DataLayer",
- "update4u.SPS.Security"
- };
-
- foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()
- .Where(assembly => assemblyNames.Contains(assembly.GetName().Name))
- .OrderBy(assembly => assembly.GetName().Name))
- {
- builder.AppendLine($"{assembly.GetName().Name}, Version={assembly.GetName().Version}, Location={GetAssemblyLocation(assembly)}");
- }
-
- return builder.ToString();
- }
-
- private static string GetAssemblyLocation(Assembly assembly)
- {
- try
- {
- return assembly.Location;
- }
- catch
- {
- return string.Empty;
- }
+ return await _f4stHelperService.GetJournalEntries(objectId);
}
[Route("getTicketOverviewCounts"), HttpGet]
diff --git a/docs/matrix42-26-1-extension-migration.md b/docs/matrix42-26-1-extension-migration.md
index a3920e5..a32a941 100644
--- a/docs/matrix42-26-1-extension-migration.md
+++ b/docs/matrix42-26-1-extension-migration.md
@@ -65,23 +65,27 @@ Final bewaehrte Minimal-Konfig:
Wichtig: Module nicht auf Vorrat laden. Jedes zusaetzliche Modul kann transitive Unity-Registrierungen erzwingen, die fuer den konkreten Webservice gar nicht benoetigt werden.
-Problematische Module in dieser Migration:
+Module duerfen nicht auf Vorrat geladen werden. Fuer Endpunkte, die Matrix42-Services nutzen, muessen die transitiven Abhaengigkeiten aber vollstaendig als Host-Module registriert werden. Fuer den finalen `IJournalService`-Pfad wurden unter anderem folgende Module benoetigt:
- `Matrix42.Pandora.Persistence`
- `Matrix42.Pandora.ServiceStore`
- `Matrix42.Pandora.BizLogic`
- `Matrix42.Pandora.Services`
+- `Matrix42.MsTeamsNotification.BizLogic`
+- `Matrix42.Integration.Aurora.General`
+- `Matrix42.Integration.Aurora.Search.BizLogic`
- `Matrix42.ServiceManager.BizLogic`
- eigenes Webservice-Assembly als Host-Modul
-Diese Module fuehrten unter anderem zu Fehlern wie:
+Waehrend der Migration zeigten fehlende Module oder fehlende Sandbox-Host-Registrierungen unter anderem folgende Fehler:
```text
IEntityDataService is an interface and cannot be constructed
IUserProfileRepository is an interface and cannot be constructed
IApiExplorer is an interface and cannot be constructed
-Could not load type 'System.Web.Routing.RouteTable'
IComplianceRuleManager is an interface and cannot be constructed
+IRequestPropertiesProvider is an interface and cannot be constructed
+IExternalSearchService is an interface and cannot be constructed
```
## Controller-Konstruktion
@@ -194,13 +198,14 @@ Danach kann der vorhandene ASQL-/Helper-Code mit der `Guid` weiterarbeiten.
## Journal-Service
-`IJournalService` benoetigt zusaetzliche Matrix42-Service-Module. `Matrix42.ServiceManager.BizLogic` hat in dieser Migration wieder eine transitive `IComplianceRuleManager`-Abhaengigkeit erzeugt und darf deshalb nicht pauschal geladen werden.
+`IJournalService` ist der bevorzugte Pfad fuer die Ticket-Historie. In 26.1 haengt der konkrete `JournalService` transitiv an Teams Notification, Pandora Services und Aurora Search. Diese Abhaengigkeiten muessen im Host vollstaendig geladen werden.
Status:
-- Ticket-Historie ueber `IJournalService` ist mit der Minimal-Host-Konfig nicht abgesichert.
-- Fuer weitere Migrationen zuerst pruefen, ob ein kleineres Modul wie `Matrix42.ServiceManager.Services` reicht.
-- Wenn nicht, Journal-Daten alternativ ueber DataLayer/ASQL lesen oder den Endpoint bewusst ausklammern.
+- Ticket-Historie laeuft ueber `IJournalService`.
+- Der Aufruf erfolgt per Reflection gegen die zur Laufzeit geladene `GetJournalList`-Signatur, damit 26.1 Patch-Level-Unterschiede keine direkte MethodRef brechen.
+- Keine manuellen `JournalService`-Konstruktionen, Proxies, `JournalManager`-Fallbacks oder HTTP-Forwards verwenden.
+- Wenn Unity ein weiteres Interface nicht aufloesen kann, zuerst in den Matrix42-DLLs nach einem `IDependencyRegistrator` fuer genau dieses Interface suchen und das zugehoerige BizLogic-/Services-Modul laden.
## Typische Fehlersymptome und Ursache
@@ -214,7 +219,13 @@ Meistens direkte Konstruktor-Injection oder ein zu breit geladenes Host-Modul.
Could not load type 'System.Web.Routing.RouteTable'
```
-Ein altes `System.Web`-/WebApi-Modul wurde in der Sandbox aktiviert. Nicht durch eigene `IApiExplorer`-Registrierung kompensieren, sondern die Ursache entfernen.
+Ein ungeeignetes altes `System.Web`-/WebApi-Modul wurde in der Sandbox aktiviert. Ursache entfernen, statt weitere Abhaengigkeiten darum herum zu laden.
+
+```text
+IApiExplorer is an interface and cannot be constructed
+```
+
+Der Matrix42-Sandbox-Host stellt nicht automatisch dieselbe WebApi-Explorer-Instanz wie der normale WebApi-Host bereit. Fuer den finalen Journal-Pfad registriert die Extension eine konkrete `System.Web.Http.Description.IApiExplorer`-Instanz per eigenem `IDependencyRegistrator`.
```json
{"Version":"1.1","Content":{...},"StatusCode":200}