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 utgangspunktet likt: ein stabil, prosessnær Delphi-desktopapplikasjon står for kritiske prosessar, medan nye krav pressar mot web, portalar, mobil bruk og integrasjon med skytjenester. Samstundes er C# etablert i mange verksemder når det gjeld tenester, Web-APIs og identitetsintegrasjon. Den sentrale problemstillinga er difor ikkje lenger «Delphi oder C#?», men å kombinere C# og Delphi i ei felles arkitektur slik at drift, vedlikehald, datalagring og tryggleik held seg handsame.

Denne artikkelen skildrar praxistette arkitekturprinsipp som har vist seg i bedriftsmiljø der ikkje alt kan eller bør byggjast på nytt. Fokuset ligg på klare ansvarsgrenser mellom desktop-klient, tenester, data og grensesnitt – og på korleis moderniseringstiltak kan planleggast med låg risiko utan å setje dei pågåande prosessane i fare.

Kvifor blandande teknologistakkar er vanlege i verksemder

Etablerte digitale bedriftsløysingar oppstår sjeldan på grøn mark. Delphi-applikasjonar har ofte vorte utvida over mange år, tett på fagprosessane, med omfattande datalogikk og djup kunnskap om spesialtilfelle. Parallelt har nye krav kome: self-service-portalar, automatiserte datautvekslingar, integrasjon med DMS/CRM/ERP, støtte for fleire klientar (multitenancy), betre revisjonsspor eller Single Sign-on.

C# tilbyr i denne samanhengen ofte fordelar for web- og tenesteøkosystem: breitt hosting-spekter, standardisert middleware, god integrasjon med identitetsleverandørar og etablerte mønster for Web-APIs. Delphi held seg på si side sterke der det gjeld performante Windows-desktop-klientar, langsiktig vedlikehaldne VCL-applikasjonar eller spesifikke multiplattform-klientar (t.d. via FMX).

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

Arkitekturprinsipp: klare lag i staden for språkgrenser

Når to språk møtest, er freistinga stor til å organisere skiljet etter teknologi (»Alt Delphi er Legacy, alt C# er nytt«). Teknisk fungerer det ofte kortsiktig, men på lang sikt fører det til friksjon: dupliserte forretningsreglar, uklare ansvar og vanskeleg reproducerbare feil.

I staden har ei fagleg lagdeling vist seg nyttig, ofte realisert som Layer-3 Architektur: presentasjon (UI), domene (forretningslogikk) og infrastruktur (datatilgang, eksterne system). Poenget er mindre lærebokmodellen enn den konkrete effekten i kvardagen: avgjerder om data, valideringar og arbeidsflyt blir fatta på éin stad og eksponerte over stabile grensesnitt.

I ei blandingsarkitektur betyr dette i praksis: Delphi kan framleis levere ein UI-del (eller bestemte arbeidsflytar), medan C# tenester kan kapsle ei fagleg domenelag – eller omvendt. Viktig er at kanten mellom laga 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“ riktige vegen. Gode avgjerder blir styrte av drift, sikkerheitskrav, latens, datavolum og release-syklusar. I praksis har det etablert seg tre mønster.

1) Tenesteorientering over HTTP/REST som standardkopling

Til vanleg er ein kopling over REST-APIar (HTTP-baserte grensesnitt) mest robust for drift og vidareutvikling. Delphi-klientar kallar C#- eller Delphi-tenester; C#-portalane brukar dei same endepunkta. Denne avkoplinga gjer releaseplanlegging meir forutsigbar: eit klientoppdatering er ikkje naudsynt så lenge APIen held seg bakoverkompatibel.

Avgjerande er ei profesjonell utforming: timeouts, retries, idempotens (gjenkøyrelege forespørslar utan sideeffekt), tydelege feilkodar og ei versjoneringsstrategi. For administrasjon og drift tel òg: einskaplege loggar, ettersporbare forespørsels-IDar og godt målbare svartider.

2) Felles database: berre med tydelege spelereglar

Ein felles databaseåtkomst frå Delphi og C# kan vere freistande, fordi han i starten går raskt. På lang sikt er han likevel risikabel om begge sider skriv direkte i dei same tabellane. Årsaka er at forretningsreglar flyttar inn i trigger, lagra prosedyrar eller „eit eller anna i klienten“. Det gjer feilsøking og revisjon vanskelegare.

Når ei felles database er uungåeleg (t.d. i overgangsfasar), hjelpjer klare reglar:

  • Sentraliser skrivtilgang: eitt system er „System of Record“ for bestemte entitetar.
  • Definer kontraktar: views eller APIar som stabilt leselag i staden for direkte tabelltilgang.
  • Planlegg migrasjonsvindauge: databaseendringar rullast alltid ut bakoverkompatibelt (t.d. nye kolonnar først valfrie).

Teknisk er databasen då ein infrastrukturkomponent, ikkje integrasjonsbussen.

3) Meldings-/hendingar for asynkrone prosessar

For avkoplede arbeidsflytar (t.d. importkøyringar, varslingar, etterbehandling, grensesnitt-jobbar) er ein asynkron modell fornuftig: eitt system publiserer hendingar, eit anna prosesserer dei. Det reduserer direkte avhengnader og jamnar ut lasttoppar.

For IT-leiing og adminar er dette spesielt viktig: overvaking (kølengder), dead-letter-konsept (feila meldingar), opptreden ved gjenstart og tydeleg fagleg idempotens. Hendingar er ikkje ein erstatning for rein masterdatastyring, men eit godt verkty for robuste prosesskjeder.

Datakontraktar og kompatibilitet: den undervurderte kjernen

Uavhengig av integrasjonsmønster avgjer kvaliteten på datakontraktene stabiliteten. Ein datakontrakt er den bindande skildringa av felt, typar, obligatorisk/valfritt og semantikk. I REST-APIar er dette typisk JSON; viktigare enn „JSON i seg sjølv“ er disiplinen i handteringa av endringar.

Vedtekne reglar som merkbart forenklar drift:

  • Utvid i staden for å bryte: legg til nye felt, lever først dei gamle vidare.
  • 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 krev ei ny versjon; men breaking changes må tydeleg kapslast inn.

Desse punkta er særleg viktige når Delphi-desktop-klientar ikkje kan oppdaterast så ofte som web-tenester.

Autentisering og autorisasjon: eit felles sikkerheitsmodell

Blanda arkitekturar feilar sjeldan på «teknikk», vanlegare på inkonsistent sikkerheit. For verksemda tel: Kven får lov til kva? Korleis vert det kontrollerte? Korleis vert det revidert? Eit felles modell unngår dobbel brukarhandtering og motseiande rollar.

I praksis fører dette til eit sentralt identitetslag: til dømes over SAML 2.0 (føderert Single Sign-on, vanleg i enterprise-omgjevnader) eller OpenID Connect (OAuth2-basert, ofte for moderne web-APIar). C#-Services let seg som regel kople direkte til ein Identity Provider; Delphi-klientar kan hente token og sende dei med i API-kall. Viktig er at også desktop-applikasjonar ikkje får «særrettar» via database-tilgang.

For administratorar sentralt:

  • Token-livstid og refresh-strategi (slik at klientar går stabilt og likevel er sikre)
  • Service-to-Service Auth for intern kommunikasjon (t.d. mTLS eller signerte token)
  • Least Privilege: ikkje gje rollar og rettar for grove snitt
  • Audit-Logs: sikkerheitsrelevante handlingar skal kunne sporast i logg

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

Ein arkitektur er i verksemda berre «god» når ho er driftbar: oppdateringar planleggde, feil lokaliserbare, last handterbar. I blanda landskap er dei vanlegaste driftsvariantane:

  • Windows- und Linux-Services: eigna for bakgrunnsjobbar, grensesnittkøyringar, worker; lett å integrere i klassiske Windows-serverdriftsmodellar.
  • Windows- und Linux-Services/Daemon: meininga for containeriserte eller VM-baserte driftsmodellar; ofte stabil i langdrift, god automatisering over systemd.
  • Microsoft IIS: etablert hosting for web-applikasjonar og reverse-proxy-scenarier i Windows-sentrerte miljø.

Viktig er at Delphi- og C#-komponentar held like driftsstandardar: konsistente Health-endepunkt (livsteikn), definerte timeouts, avgrensa ressursforbruk, samt eit klart deployment- og rollback-føremål. Det reduserer «teknologispesifikke» særbehandlingar.

Logging, Tracing und Metriken: ein gemeinsames Observability-Niveau

Særleg ved to teknologistakkar er gjennomgåande diagnosekjedar avgjerande. Eit typisk problem: Delphi-klienten melder «Feil ved lagring», C#-servicen har ein timeout, databasen melder locks – utan felles samanheng.

Praktisk prøvd og anbefalt er:

  • Korrelasjons-IDar per request (Client → API → DB), slik at loggar kan samlast.
  • Strukturert logging (nøkkel/verdi i staden for rein tekst), for å kunne filtrere seinare.
  • Metrikkar for latens, feilsatsar, kølengder og ressursbruk.
  • Feilklassifisering: forretningsfeil (validering) skilt frå tekniske feil (timeout, nettverk).

Desse grunnleggjande prinsippa sparar i praksis meir tid enn nokon diskusjon om «det rette språket».

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

I Delphi-installasjonar 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-omstillingar, tilgjenge på drivarar, tryggleikskrav. Ei BDE-avløysing er då ikkje berre modernisering, men ei reduksjon av risiko.

Typisk er overgangen til BDE-avløysing med native-tilknyting (moderne datatilgangslag i Delphi), kombinert med ei database som er driftsmessig 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 skriveaksessar regulerte?
  • Locking- og isolasjonsstrategi: slik at desktop-workflows og tenester ikkje blokkerer kvarandre.

Ved migrasjonar lønner ei trinnvis planlegging seg: fyrst modernisere drivarar og tilgangslag, deretter konsolidere datamodellen, og til slutt stabilisere integrasjonssnitt. Då blir feilkjelder isolerbare og rollbackar realistiske.

Release-Management: samordne ulike oppdateringssyklusar

Eit tilbakevendande spenningsfelt er oppdateringsfrekvensen: web-tenester kan rullast ut oftare, desktop-klientar ofte sjeldnare (utrullingsvindu, brukarkommunikasjon, paketering). Ei felles arkitektur må ta omsyn til denne asymmetrien.

Praktiske konsekvensar:

  • API-bakoverkompatibilitet er påkrevd, ikkje valfritt.
  • Feature Flags (funksjonelle brytarar) hjelper med å aktivere nye funksjonar kontrollert på serversida.
  • Skjema-migrasjonar må gå i fasar: fyrst utvide databasen, så la tenesta ta det i bruk, og så la klienten følgje etter.
  • Tydelig utrangering: fjern gamle endepunkt eller felt fyrst etter ein definert periode.

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

Typiske Stolpersteine und wie man sie systematisch vermeidet

Frå driftssynspunkt er dei vanlegaste problema i blandande Delphi/C#-landskap godt føreseielege. Dersom ein adresserer dei tidleg, fell dei langsiktige kostnadene merkbart.

Snublefelle 1: duplisert forretningslogikk

Når Delphi-klient og C#-teneste implementerer dei same reglane ulikt, oppstår «spøkelsesfeil»: ein prosess fungerer i UI, men feiler ved API-import. Motmiddel: sentraliser reglane i domenelaget (tenesta) eller fordel ansvar fagleg tydeleg, inkludert entydige valideringsresponsar.

Snublefelle 2: UI-Workarounds statt sauberer Schnittstellen

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

Snublefelle 3: uklare ansvar i drifta

Når det ikkje er klart kva team som har ansvar for kva teneste, kva logg og kva driftsparameter, endar feilsøking i ping-pong. I praksis hjelper eit tenestekart (kva teneste, kva avhengigheiter, kva portar, kva interne SLA-ar) og einskaplege Runbooks for vanlege feiltilstandar.

Stolpefot 4: manglande sikkerheitskonsistens

Eit portal med SSO, men ein desktop-klient med lokale admin-kontoar er i mange revisjonar eit problem. Eit felles identitets- og rollemodell reduserer risiko og supportomfang.

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

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

  • Delphi er ofte godt eigna for: eksisterande Windows-Desktop-Clients (VCL), svært reaksjonssnøe UI-arbeidsflytar, offline-nære scenario, langsiktig vedlikehald av vaksne brukargrensesnitt.
  • C# er ofte godt eigna for: sentrale REST-APIs, integrasjons-tenester mot ERP/DMS/CRM, komponentar nært identity, portalar og backend-prosessar med høg endringsfrekvens.
  • Ta ein medviten avgjerd: datalogikk og validering bør ikkje liggje «i klienten» når fleire frontendar finst (desktop, portal, importjobb).

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

Moderniseringsveg: Gradvis frå applikasjon til system

I praksis er ein felles arkitektur ofte ein overgangsperiode, men ein lang ein. Ein realistisk moderniseringsveg unngår store prosjekt med høg risiko og satsar på målbare mellomtapar:

  1. Stabilisere grensesnitt: innføre REST-API som fagleg kant, sjølv om ikkje alt internt er «pent» endå.
  2. Modernisere datatilgang: BDE-Ablösung, drivarar, 64‑bit-støtte, tydelege transaksjonar.
  3. Sentrere identitet: SSO og rollemodell for alle tilgangsvegar.
  4. Eining av drift: Logging/Monitoring/Health, klare deploys, reproduserbare miljø.
  5. Avkople faglege modul: flytt særleg endringstette delar til tenester, og slank UI-en trinnvis.

Denne rekkjefylgja er ikkje dogmatisk, men ho minimerer vanlegvis avhengigheiter: utan stabile grensesnitt og eit driftskonsept blir kvar vidare endring dyrare.

Konklusjon: Integrasjon er eit arkitekturansvar, ikkje eit språkspørsmål

Ein haldbær kombinasjon av Delphi og C# oppstår ikkje gjennom «brobibliotek», men gjennom klare faglege kantar, reine datakontraktar og eit driftskonsept som tek overvaking, sikkerheit og release management på alvor. Når C# og Delphi i ei felles arkitektur medvite spelar saman langs ansvarslinjer, vinn bedrifter først og fremst éin ting: modernisering utan prosessbrot. Delphi kan framleis trygt bære stabile desktop-arbeidsflytar, medan C#-tenester leverer integrasjon, web-API-ar og portalfunksjonar som sentrale plattformtenester.

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

På fagområdet spelar også Delphi modernisering og REST-API for eksisterande programvare ei viktig rolle når integrasjonar, dataflytar 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 tidleg saman vurderast.

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 utsett til seinare fasar.
  • 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 straks tilgjengelege. 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.