Net-Base Magasin

07.06.2026

C# og Delphi i ein felles arkitektur: pragmatisk integrasjon i staden for enten-eller

Mange bedrifter driv etablerte Delphi-desktopapplikasjonar og byggjer parallelt opp nye C#-tenester og portalar. Artikkelen viser korleis C# og Delphi i ei felles arkitektur kan samarbeide på ein ryddig måte: gjennom klare lag, stabile grensesnitt, felles...

07.06.2026

Frå magasinetema til prosjektpraksis

Passande teneste- og tekniske sider til innlegget

I mange IT-avdelingar er utgangssituasjonen lik: Ei stabil, prosesstilknytt Delphi-desktopapplikasjon handterer kritiske prosessar, medan nye krav pressar mot web, portalar, mobil bruk og integrasjon med skytjenester. Samtidig er C# i mange verksemder etablert når det gjeld tenester, Web-APIar og identity-integrasjon. Den sentrale spørsmålet er derfor ikkje lenger „Delphi oder C#?“, men: C# und Delphi in einer gemeinsamen Architektur å kombinere slik at drift, vedlikehald, datalagring og sikkerheit held seg handterlege.

Denne artikkelen skildrar praktiske arkitekturprinsipp som har vist seg i verksemdsmiljø der ikkje alt kan eller bør byggast på nytt. Fokus ligg på tydelege ansvarsgrenser mellom desktop-klient, tenester, data og grensesnitt – og på korleis du planlegg moderniseringssteg med låg risiko utan å sette dei løpande prosessane i fare.

Kvifor samansette teknologistakkar er vanlege i verksemder

Vaksne digitale løysingar i verksemder oppstår sjeldan frå grønt felt. Delphi-applikasjonar har ofte blitt utvida over mange år, tett på fagprosessane, med omfattande datalogikk og djup kunnskap om særtilfelle. Parallelt har nye krav meldt seg: Self-Service-Portale, automatiserte datautvekslingar, tilkopling til DMS/CRM/ERP, fleirmandantstøtte, betre revisjonssporbarheit eller Single Sign-on.

C# tilbyr i denne samanhengen ofte fordelar for web- og tenesteøkosystem: breitt hosting-spekter, standardisert middleware, god integrasjon med Identity Provider og etablerte mønster for Web-APIar. Delphi held framleis styrken når det gjeld performante Windows-desktop-klientar, langsiktig vedlikehalde VCL-applikasjonar eller spesifikke multiplattform-klientar (t.d. via FMX).

Blandinga er difor ikkje eit «særtilfelle», men eit realistisk svar på investeringsvern og moderniseringspress. Avgjerande er at felles drift ikkje blir ei varig byggeplass.

Arkitekturprinsipp: klare sjikt i staden for språkgrenser

Når to språk møtast, er freistinga stor for å organisere skiljet etter teknologi («Alles Delphi ist Legacy, alles C# ist neu»). Teknisk fungerer det ofte kortsiktig, men fører langsiktig til friksjon: doble forretningsreglar, uklare ansvarsforhold og vanskeleg å reprodusere feil.

I staden har det vist seg formålstenleg med ei fagleg sjiktinndeling, ofte realisert som Layer-3 Architektur: Presentasjon (UI), domene (forretningslogikk) og infrastruktur (dataåtkomst, eksterne system). Poenget er mindre lærebokmodellen enn konkret verknad i kvardagen: Avgjerder om data, valideringar og arbeidsflytar vert fatta på eitt stad og eksponerte gjennom stabile grensesnitt.

I ei blandingsarkitektur betyr dette i praksis: Delphi kan framleis levere ein UI-del (eller bestemte arbeidsflytar), medan C# Services kapslar inn ei fagleg domenelag – eller omvendt. Viktig er at grensa mellom sjikta er teknisk rein og testbar.

C# und Delphi in einer gemeinsamen Architektur: drei bewährte Integrationsmuster

For koplinga mellom Delphi og C# finst det ikkje „den eine“ rette vegen. Gode avgjerder blir styrt av drift, sikkerheitskrav, latenstid, datamengde og release-syklusar. I praksis har det utvikla seg tre mønster.

1) Tjenesteorientering über HTTP/REST als Standardkopplung

For drift og vidareutvikling er ofte ei kopling over REST-APIs (HTTP-baserte grensesnitt) mest robust. Delphi-klientar kallar C#- eller Delphi-tenester; C#-portalar brukar dei same endepunkta. Denne avkoplinga gjer release-ar meir planbare: ein klientoppdatering er ikkje naudsynt så lenge API-en held bakoverkompatibilitet.

Viktig er ei profesjonell utforming: timeouts, retries, idempotens (gjentakbare requests utan sideverknader), klare feilkoder og ein versjoneringsstrategi. For administrasjon og drift tel òg: einsarta loggar, etterprøvbare Request-IDs og godt målbare svartider.

2) Gemeinsame Datenbank: nur mit klaren Spielregeln

Ein felles databaseaksess frå Delphi og C# kan verke freistande fordi det er raskt i byrjinga. På sikt er det derimot risikabelt dersom begge sider skriv direkte til dei same tabellane. Grunnen er at forretningsreglar flyttar seg til triggerar, Stored Procedures eller «eit eller anna i klienten». Det gjer feilsøking og revisjon vanskelegare.

Om ein felles database er uunngåeleg (t.d. i overgangsfasar), hjelper klare reglar:

  • Sentralsier skrivtilgangane: eitt system er «System of Record» for bestemte entitetar.
  • Definere kontraktar: views eller APIs som eit stabilt leselag i staden for direkte tabelltilgang.
  • Planlegg migrasjonsvindauge: endringar i databasen rullast alltid ut bakoverkompatibelt (t.d. nye kolonnar først som valfrie).

Teknisk er databasen då ein infrastrukturkomponent, ikkje integrasjonsbussen.

3) Messaging/Events für asynchrone Prozesse

For entkoplede arbeidsflytar (t.d. importkøyringar, varsel, etterbehandling, grensesnitt-jobbar) er ein asynkron modell fornuftig: eitt system publiserer hendingar, eit anna behandlar dei. Det reduserer direkte avhengigheiter og stabiliserer belastningstoppar.

For IT-leiing og administratorar er dette viktig: overvaking (kølengder), Dead-Letter-Konzepte (feila meldingar), gjenopptakingsadferd og klar fagleg idempotens. Events er ikkje ein erstatning for god styring av stamdata, men eit eigna verkty for robuste prosesskjeder.

Datakontraktar und Kompatibilität: der unterschätzte Kern

Uavhengig av integrasjonsmønster avgjer kvaliteten på datakontraktene stabiliteten. Ein datakontrakt er den bindande beskrivinga av felt, typar, obligatorisk/valfritt og semantikk. I REST-APIs er dette typisk JSON; viktig er ikkje „JSON i seg sjølv“, men disiplinen i handtering av endringar.

Gode reglar som merkbart forenklar drifta:

  • Utvid framfor å bryte: legg til nye felt, lever gamle vidare i første omgang.
  • Dokumenter feltsemantikk: ikkje berre „string“, men t.d. ISO-dato, tidssone, tillate tilstandar.
  • Handter enum-verdiar tolerant: klientar må tåle ukjende verdiar (framoverkompatibilitet).
  • Bruk API-versjonering med omhug: ikkje kvart release treng ein ny versjon; men Breaking Changes må vere tydeleg avgrensa.

Desse punkta er spesielt viktige når Delphi-desktop-klientar ikkje kan oppdaterast like ofte som web-tenester.

Autentisering og autorisering: ei felles sikkerheitsmodell

Blanda arkitekturar feilar sjeldnare på «teknikk», vanlegare på inkonsekvent sikkerheit. For verksemda tel: Kven får gjere kva? Korleis blir det sjekka? Korleis blir det revidert? Ein felles modell unngår dobbel brukarhandtering og motseiande roller.

I praksis fører det til eit sentralt identitetslag: til dømes via SAML 2.0 (føderert Single Sign-on, vanleg i enterprise-omgjevnadar) eller OpenID Connect (OAuth2-basert, ofte for moderne Web-APIar). C#-Services let seg som regel direkte knyte til ein Identity Provider; Delphi-klientar kan hente token og sende dei med ved API-kall. Viktig er det at òg skrivbordsapplikasjonar ikkje får «særrettar» via databaseinnlogging.

For administratorar sentralt:

  • Token-livstidar og refresh-strategi (slik at klientar går stabilt og framleis er sikre)
  • Service-to-Service Auth for intern kommunikasjon (t.d. mTLS eller signerte token)
  • Least Privilege: ikkje gje roller og rettar for grove omfang
  • Audit-Logs: sikkerheitsrelevante aksjonar skal kunne etterprøvast i logg

Betriebskonzepte: Windows- og Linux-Services, IIS und Prozesse im Alltag

Ei arkitektur er i verksemda berre god når ho er driftbar: oppdateringar planleggbar, feil lokaliserbar, last handterbar. I blanda landskap er dei vanlegaste driftsvariantane:

  • Windows- og Linux-tenester: eigna for bakgrunnsjobbar, grensesnittkøyringar, worker; godt integrerbare i klassiske Windows-server-driftsmodellar.
  • Windows- og Linux-tenester/Daemon: meiningsfullt for containeriserte eller VM-baserte driftsmodellar; ofte stabile i langvarig drift, god automasjon via systemd.
  • Microsoft IIS: etablert hosting for nettapplikasjonar og reverse-proxy-scenar i Windows-sentrale omgjevnadar.

Viktig er at Delphi- og C#-komponentar oppfyller like driftsstandardar: konsistente health-endpoints (livsteikn), definerte timeouts, avgrensa ressursforbruk, samt eit klart deploy- og rollback-føremål. Det reduserer «teknologispeisifikke» særhandsamingar.

Logging, Tracing und Metriken: ein gemeinsames Observability-Niveau

Særleg ved to teknologistakkar er gjennomgåande diagnosekjeder avgjerande. Eit typisk problem: Delphi-klienten melder «feil ved lagring», C#-tenesta har ein timeout, databasen melder lås – utan felles samanheng.

Praktisk førestår følgjande:

  • Korrelasjons-IDar per request (Client → API → DB), slik at loggar kan setjast saman.
  • Strukturert logging (nøkkel/verdi i staden for reine tekstlinjer), for enkel filtrering seinare.
  • Metrikkar for latenstid, feilrater, kølengder og ressursbruk.
  • Feilklassifikasjon: forretningsfeil (validering) skilt frå tekniske feil (timeout, nettverk).

Desse grunnprinsippa sparar i praksis meir tid enn kvar diskusjon om «det riktige språket».

Datatilgang og migrasjon: BDE-avløysing, FireDAC og moderne databasar

I Delphi-bestandar spelar datatilgang historisk ei stor rolle. Der det framleis er gamle tilgangsvegar som Borland Database Engine (BDE) i bruk, oppstår ekstra press: operativsystemoppdateringar, 64‑bit-overgangar, drivar-tilgjengelegheit, sikkerheitskrav. Ei BDE-avløysing er då ikkje berre modernisering, men risikoreduksjon.

Typisk er omstigninga til BDE-avløysing med nativ tilkopling (moderne datatilgangslag i Delphi), kombinert med ein database som er driftsteknisk handterbar (t.d. PostgreSQL, SQL Server, MariaDB). For ein felles Delphi/C#-arkitektur er to aspekt viktige:

  • Transaksjonsgrenser: Kven startar/committar transaksjonar, og korleis blir parallelle skrivetilgangar regulerte?
  • Lås- og isolasjonsstrategi: for å hindre at desktop-arbeidsflytar og tenester blokkerer kvarandre.

Ved migrasjonar lønner det seg med ein trinnvis plan: først modernisere drivar- og tilgangslag, deretter konsolidere datamodellen, og til slutt stabilisere integrasjonssnitt. Slik blir feilkjelder isolerbare og rollbacks realistiske.

Release-Management: samordne ulike oppdateringssyklusar

Eit tilbakevendande spenningsfelt er oppdateringsfrekvensen: web-tenester kan rullast ut oftare, desktop-klientar ofte sjeldnare (utrulingsvindu, brukarinformasjon, pakking). Ein felles arkitektur må ta omsyn til denne asymmetrien.

Praktiske konsekvensar:

  • API-bakoverkompatibilitet er krav, ikkje val.
  • Feature Flags (funksjonelle brytarar) hjelper med å aktivere nye funksjonar kontrollert på serversida.
  • Skjema-migrasjonar må gå i fasar: utvid databasen først, ta i bruk tenesta deretter, la klienten følge etter.
  • Tydeleg avvikling: gamle endepunkt eller felt skal fjernast først etter ein definert periode.

Særleg i regulerte miljø er det viktig å feste desse reglane skriftleg som arkitekturretningsliner, slik at beslutningar ikkje vert funne opp på nytt i kvart prosjekt.

Typiske fallgruver og korleis ein kan unngå dei systematisk

Frå driftsynspunkt er dei vanlegaste problema i blandte Delphi/C#-landskap lette å føreseie. Tek ein dei tidleg, fell dei langsiktige kostnadene merkbart.

Fallgruve 1: dobbel forretningslogikk

Når Delphi-klient og C#-teneste implementerer same reglar ulikt, oppstår «spøkelsesfeil»: ein prosess fungerer i UI, men feilar ved API-import. Motmiddel: sentraliser reglar i domenelaget (teneste) eller fagleg klart tilordne dei, inkludert entydige valideringssvar.

Fallgruve 2: UI-omgåingar i staden for reine grensesnitt

«Raskt skrive eit databasefelt til» verkar i enkelttilfelle uskuldig, men skaper skugge-grensesnitt utan logging, autentisering og versjonering. Bedre: konsekvent gå via definerte endepunkt, sjølv om det i starten krev meir disiplin.

Fallgruve 3: uklare ansvarsforhold i drifta

Når det ikkje er klart kva team som er ansvarleg for kva teneste, kva logg og kva driftsparametrar, endar feilsøking i ping-pong. Praktisk hjelper ein service-landskap (kva teneste, kva avhengigheiter, kva portar, kva interne SLA-ar) og einsarta Runbooks for vanlege feil.

Stolpe 4: manglande sikkerheitskonsistens

Eit portal med SSO, men ein Desktop-Client med lokale admin-kontoar er i mange revisjonar eit problem. Eit felles identitets- og rollemodell reduserer risiko og støtteinnsats.

Beslutningsstøtte: Kva blir i Delphi, kva går i C#?

Den fornuftige fordelinga heng mindre av ideologi enn av prosessnærleik og driftskrav. Som rettleiing frå arkitektur- og driftssynspunkt:

  • Delphi er ofte eigna for: eksisterande Windows-Desktop-Clients (VCL), svært reaktive UI-arbeidsflytar, offline-nære scenario, langsiktig vedlikehald av etablerte brukargrensesnitt.
  • C# er ofte eigna for: sentrale REST-APIar, integrasjonsservicar til ERP/DMS/CRM, identitetsnære komponentar, portalar og backend-prosessar med høg endringsfrekvens.
  • Ta ein medvite avgjerd: datalogikk og validering bør ikkje liggje «i klienten» når fleire frontendar finst (Desktop, Portal, Importjobs).

Viktig: Målet er ikkje «alt til C#», men ei robust totalarkitektur der moderniseringstiltak er planlagde og forretningsprosessane går stabilt.

Moderniseringsveg: stegvis frå applikasjon til system

I praksis er ei felles arkitektur ofte ei overgang, men ei lang ein. Ein realistisk moderniseringsveg unngår storprosjekt med høg risiko og byggjer på målbare milepælar:

  1. Stabilisere grensesnitt: innfør REST-API som fagleg avgrensing, sjølv om ikkje alt internt er «pent» enno.
  2. Modernisere dataåtkomst: BDE-utskifting, drivarar, 64‑bit-støtte, tydelege transaksjonar.
  3. Sentralisere identitet: SSO og rollemodell for alle tilgangsvegar.
  4. Samordne drift: Logging/Monitoring/Health, tydelege deploymentprosessar, reproducerbare miljø.
  5. Avkople faglege modul: spesielt endringsintensive delar flyttast til tenester, UI blir gradvis slanka ned.

Denne rekkjefølgja er ikkje dogmatisk, men ho minimaliserer vanlegvis avhengigheiter: utan stabile grensesnitt og eit driftkonsept blir kvar vidare endring dyrare.

Konklusjon: Integrasjon er ei arkitekturoppgåve, ikkje eit språkspørsmål

Ei berekraftig kombinasjon av Delphi og C# oppstår ikkje gjennom «brobibliotek», men gjennom klare faglege avgrensingar, tydelege datakontraktar og eit driftkonsept som tek Monitoring, Security og Release-Management på alvor. Når C# og Delphi i ei felles arkitektur medvite spelar saman langs ansvarsområde, vinn verksemder fyrst og fremst éin ting: modernisering utan prosessbrot. Delphi kan vidare halde stabile Desktop-Workflows påliteleg, medan C#-tenester tilbyr integrasjon, Web-APIar og portalar som sentrale plattformfunksjonar.

Dersom de ønskjer å modernisere ei eksisterande Delphi-landskap trinnvis eller knyte C#-tenester på ein ryddig måte, er eit arkitektur-review med blikk på grensesnitt, data, drift og sikkerheit den raskaste vegen til robuste avgjerder. Meir om dette i direkte dialog:

I det faglege miljøet spelar også Delphi modernisering og REST-API for eksisterande programvare ei viktig rolle, når integrasjonar, dataflyt og vidareutvikling må fungere godt saman.

Drøft prosjekt eller moderniseringsprosjekt med Net-Base.

Neste steg

Når temaet blir eit reelt prosjekt, bør arkitektur, eksisterande system og drift vurderast tidleg saman.

Vi støttar ikkje berre ved enkeltspørsmål, men òg når korte kildekodesnuttar, legacy-tema eller portalidéar skal utviklast til eit robust bedriftsprosjekt.

  • Eksisterande tilstand, målbiletet og tekniske risikoar blir vurderast samla.
  • REST, datatilgang, portalar og utrulling blir ikkje utsette til seinare som etterverknader.
  • De ser tidleg kva veg som er økonomisk og driftsmessig berekraftig.

Del innlegg

Del dette innlegget direkte

LinkedIn, X, XING, Facebook, WhatsApp og e-post er tilgjengelege med ein gong. For Instagram klargjer vi lenke og kort tekst med det same.

E-post

Instagram opnar i ein ny fane. Lenkje og kort tekst blir kopiert til utklippstavla på førehand.