TASK-SRV-001 — InfocadServer repository inventory (service/business tier)

  • Repo: /Users/leonardo/GitHub/Documentation/InfocadServer
  • Solution: InfocadServer.sln (2329 lines)
  • Mode: READ-ONLY mechanical inventory (parse .sln + project files, targeted grep for markers). No source modified, nothing built/run.
  • Generated JSON: /Users/leonardo/GitHub/Documentation/docs/_generated/inventory-server.json
  • Backend ground truth (confirmed): Oracle via ODP.NET (Oracle.DataAccess / Oracle.ManagedDataAccess), stored procedures through DAL Execute*StoredProcedure wrappers. No ORM, no SQL Server / T-SQL, no Web API.

Method / tooling caveat

The interactive shell grep is a wrapper function (ugrep -G --ignore-files) that forces basic-regex and honors ignore files, which under-counts -E alternation patterns. All counts in the JSON were produced with real POSIX /usr/bin/grep -E (via a Python subprocess using /bin/sh), excluding bin/ obj/ packages/ node_modules/ .git/ per the safety brief. Where the two disagreed (e.g. SP-wrapper files 238 vs wrapper's 214) the /usr/bin/grep value is authoritative.

Projects

  • 193 Project(...) entries in the .sln = 34 solution folders (type GUID {2150E333-...-DE8}) + 159 real projects.
  • Languages: 83 C# (.csproj), 76 VB.NET (.vbproj).
  • Project style: 155 classic (MSBuild), 4 SDK-style.
  • Target frameworks: v4.8 -> 139; net8.0 -> 19; net8.0-windows -> 1. (20 net8 total.)
  • XNET / .NET 8 migration: exactly the 20 *XNET-named projects are the net8 targets (1:1 correspondence). These are side-by-side .NET 8 re-targets of legacy 4.8 libraries (Common, Configuration, Resources, LogManager, and the BIM/IEM/Property/Global/Booking/Extension shared/interface/DAL/manager slices).

Domains (project counts, top)

IEM 10 - Global 8 - Property 8 - BIM 8 - Energy 6 - ECM 6 - Booking 6 - Accounting/Check/Document/Maintenance/ServiceDesk/Stock/WorkerKit/Census/QualityCheck/Book/WorkAccounting/Project/Cde 5 each - BulkLoader/Report/ExportService 4 - then Extension, Configuration, ArchiveManager, LogManager, Common, Resources (2) and singletons (Plugin_SAPPM, Business, DatabaseInstaller.Oracle, JobScheduler, ULM, PlanBot, FullTextIndexer, Property{XML,SVG}Export, PropertyGeoLib, InfocadServer, InfocadTester, WindowService, UpdateService, ConnectionsService, SQLScript).

Layers (vertical-slice pattern <Domain>{SharedObjects,Interface,DAL,BL,Controllers})

Interface 27 - SharedObjects 26 - Controllers 23 - DAL 20 - BL 18 - Manager 12 - Service 5 - Server 3 - Other 25 (hosts, tools, XML/SVG exporters, GeoLib, Common/Resources/Configuration, etc.).

WCF surface (thin)

  • [ServiceContract] interfaces: 4 filesEnergyService/Services/{IDashBoardService,IDssDashBoardService,IPolicyRetriever}.cs and the generated PropertyServiceIoT/Connected Services/NiagaraService/Reference.cs (a WCF client proxy).
  • [OperationContract]: 4 files. System.ServiceModel referenced in 14 files.
  • *.svc hosts: 0. No ServiceHost(...) self-hosting found. WCF here is essentially the EnergyService dashboard contracts (self/IIS-hosted elsewhere) plus one generated external client — not a broad service bus.

Windows Services

  • NT-service hosts (ServiceBase-derived, each with a ProjectInstaller):
    • InfocadServer (VB, Inherits ServiceProcess.ServiceBase) — the main server service.
    • ECMServer (C#, : ServiceBase).
    • IEMServer (VB, Inherits ...ServiceBase).
  • Companion executables (OutputType Exe/WinExe; manage or launch the above, not ServiceBase themselves): ConnectionsService & UpdateService (C#, use ServiceController to start/stop the services), IEMService (C#, launches StartIEM.Main), WindowService (VB WinExe, Start.vb), InfocadTester (VB WinExe).
  • 8 projects total have Exe/WinExe OutputType (4 Exe + 4 WinExe).
  • Note: JobScheduler and GlobalManager are Library projects (engine/manager libraries), not standalone service hosts.

Data access — "stored procedures via ODP.NET, no ORM"

  • Raw CommandType.StoredProcedure: 1 file only (ArchiveManager/DataLayer.cs).
  • The real pattern is a DAL helper wrapper: ExecuteNonQueryStoredProcedure (~1310 call sites), ExecuteQueryStoredProcedure (~942), ExecuteReaderStoredProcedure (~440), plus ExecuteScalar/...Table variants. 238 files use these wrappers, passing bare SP names (e.g. "STK_GETMEASURE", "BOOKING_PHYSICALDELETEBOOK_AVA").
  • Per-project concentration: GlobalManager 36, BookingManagerXNET 29, PropertyManager 27, BookManager 23, then the *DAL projects (Stock 15, Energy 11, WorkerKit/Maintenance/Document 10 each). Full map in JSON data_access.sp_wrapper_by_project.
  • ODP.NET: 251 files reference Oracle.DataAccess / Oracle.ManagedDataAccess (classic + managed + .Client/.Types).
  • No ORM / no Web API confirmed: ApiController = 0 files. (3 files reference System.Web.HttpCommon/CommonXNET config helpers and PropertyManager/DAO_Viewer30.vb — but define no ApiController, so this is not a Web API surface.)

Customization / plug-in projects

  • Only Plugin_SAPPM (VB) is present in this solution.
  • EntityLayer<Customer>, ServiceJob.*, TicketLoader*, ExternalAuth.*, ExternalDocSave.*absent from this repo (per-customer / external plug-ins delivered outside InfocadServer.sln).

Confidence

  • Verified (mechanical): project counts & languages & TFMs; XNET<->net8 1:1; .svc=0; ApiController=0; ServiceBase host list; SP-wrapper vs CommandType counts; ODP.NET file count.
  • Inferred: domain/layer classification is prefix/suffix-based (25 projects in "Other" layer — hosts/tools/exporters that don't follow the 5-layer suffix convention); WCF hosting location (contracts exist but hosting is external/IIS, not in-repo .svc).
  • Not attempted: build, runtime, DB connectivity (out of scope / forbidden).