Platform Evolution
Assessment run-2026-07-27-1 · 213 of 213 repos assessed
Repos / phenix-contact-centre-wcf

phenix-contact-centre-wcf

Legacy Contact Centre SOAP web service (ASMX, despite the wcf name) on .NET Framework 4.7.2 exposing contact CRUD/search operations over the shared ContactCentre database, plus its SSDT database project and shared NuGet packages.

29 · redhighkernelOn-premZDD: not applicableservicesecrets in source

Health score

29

0 to 100 across seven weighted factors; nothing is hidden. Green is 75 and above, amber 50 to 74, red below 50. How scoring works.


Runtime currency / 25
0
.NET Framework, out of mainstream support
Legacy transport / 15
6
Calls at least one legacy WCF endpoint
Test posture / 15
8
Some tests, coverage is thin
Security hygiene / 15
0
Credentials or keys committed to source
Dangerous coupling / 15
0
shares a core database (sqlserver:ContactCentre); depends on pinning component(s): application-framework, phenix-feature-service; 15 dependents without good tests
Activity / 10
10
Actively maintained
Deployment hygiene / 5
5
CI in place
Health over time
2026-07-24 (run-2026-07-24-1): 292026-07-27 (run-2026-07-27-1): 29
No change since 2026-07-24 (29 to 29).

Facts

Languagescsharp, sql
FrameworksASMX/SOAP, Autofac, SSDT
Runtimes.NET Framework 4.7.2
Tests / CIsome / CI in place
Last commit2026-07-08
OwnerOwner unknown (mapping to be curated)
DomainContact centre and CRM (system generated; curate in repo-owners.json to override)
Product areaPhenix
HostedOn-prem Deployed to our own machines
  • Release "\marketing\contact-centre\phenix-contact-centre-wcf": Development WCF: deployment-group phase (agents on our own machines)
  • Release "\marketing\contact-centre\phenix-contact-centre-wcf": Staging WCF: deployment-group phase (agents on our own machines)
  • Release "\marketing\contact-centre\phenix-contact-centre-wcf": Production WCF: deployment-group phase (agents on our own machines)
  • Release "\marketing\contact-centre\phenix-contact-centre-wcf": Training WCF: deployment-group phase (agents on our own machines)
  • Release "\marketing\contact-centre\phenix-contact-centre-wcf": Development DB: deployment-group phase (agents on our own machines)
Releases3 release pipeline(s): \marketing\contact-centre\phenix-contact-centre-wcf; \marketing\contact-centre\phenix-contact-centre-wcf packages; \marketing\contact-centre\phenix-contact-centre-wcf stealth
Integrationsoap, wcf, rest, redis
SourceOpen in Azure DevOps

Risk flags

Each flag links to its glossary definition.

Dependencies in context

Laying out the graph…
greenamberreddata store (square, dashed link)Node size follows fan-in. Click any node to open it.

Entanglement

kernel Bound into the core by 3 mechanism(s).

Detaches when its pinning dependencies are cut or multi-targeted (application-framework, phenix-feature-service); and when its WCF surface gains a modern interface or its WCF calls move to one; and when the shared database group it belongs to gains an owned API or completes schema separation (sqlserver:ContactCentre).

Capability duplication

Part of the Contact centre family (retire): First generation, WCF

Migration playbooks

Generated from this repo's assessment data: what is feasible, what blocks it, and the steps in order. Ratings: green means actionable now, amber means sequence other work first, red means blocked, grey means not applicable.

ZDD adoption

Not applicable

Not a deployed service (libraries, database definitions, desktop apps) or a retirement candidate not worth the investment. Retirement or consolidation candidate; do not invest in ZDD adoption.

SQL Server exit

Retire instead

This repo is a retirement or consolidation candidate. Do not invest in a database migration; execute the retirement and the SQL Server dependency disappears with it.

Containerisation

Retire instead

This repo is a retirement or consolidation candidate; containerising it would be investment in something we intend to switch off.

Recommended actions

Rotate the credentials committed to phenix-contact-centre-wcf

Risk flags indicate credentials or keys in source (plaintext-credentials). Rotate now and enable secret scanning in CI; this is independent of all other work.

Impact: Closes a live security exposure at near-zero cost

proposed

Retire phenix-contact-centre-wcf

First generation, WCF. Part of the Contact centre consolidation: Converge on the generation 2 pair, give the ContactCentre database a named owner (stage 4), and retire the earlier generations as their remaining traffic moves.

Impact: A migration never paid for, a pipeline decommissioned and an attack surface removed

proposed

Raise the test floor on phenix-contact-centre-wcf

15 systems depend on it and test coverage is thin. Chokepoints carry good tests before they are changed.

Impact: De-risks change for 15 dependent systems

proposed

Assessment notes

phenix-contact-centre-wcf

Purpose

The legacy Contact Centre service: ContactCentre.asmx (SOAP) with legacy and "new" service implementations covering contact read/write, search, group field settings, marketing preferences and postcode lookup. The repo also owns the ContactCentreDatabase SSDT project (stored procedures, functions, views) and publishes ContactCentre.DataModel and TC.ContactCentre.ServiceClient NuGet packages consumed elsewhere in the estate.

Tech stack

C# on .NET Framework 4.7.2 (SDK-style csproj with PackageReference, LangVersion latest), ASMX web service hosted in IIS, Autofac + Autofac.Wcf DI, TC.Cache stack with Redis storage, Microsoft.Data.SqlClient, RestEase HTTP client. The TC.ContactCentre.ServiceClient package multi-targets net462/net472/netstandard2.0/net6.0/net8.0 so modern consumers can call the SOAP endpoint.

Deployment

prod_application with 3 releases. Build pipeline phenix-contact-centre-wcf; release pipelines under \marketing\contact-centre\ (main, packages, stealth). Three YAML pipelines in-repo: azure-pipelines.yml (service), azure-pipelines-packages.yml (DataModel/Services packages) and build-tc-contactcentre-serviceclient.yml, all using shared azure-pipelines-templates. Per-environment Web.*.config transforms for seven environments.

Dependencies

Internal packages: TC.ConnectionBroker.* (tc-connectionbroker), TC.Exceptions (tc-exceptions), TC.Phenix.ApplicationFramework (application-framework), TC.Phenix.CompanyInfo (company-info-api), TC.Phenix.Feature/TC.ServiceContract.PhenixFeature (phenix-feature-service), TC.UserAccount.ServiceContract (backoffice-useraccount-service), TC.Pure360.MarketingService.Shared (backoffice-pure360-marketing-service-api); a RestEase client calls the Contact API (phenix-contact-api). TC.CustomerPortalUsers.ServiceContracts has no confidently mappable source repo. External: Allies PostCoder SOAP postcode lookup and Webservices.nl.

Data stores

SQL Server ContactCentre database via ConnectionBroker connection ContactCentre — the same shared contact database used by the other contact-centre apps; this repo is where its schema lives. Redis is the configured cache storage (CacheStorage=redis).

Integration points

Inbound SOAP over the ASMX endpoint (with a WCF-style service client package for consumers). Outbound REST to the Contact API, WCF via TC.ConnectionBroker.Wcf, Redis caching, and external SOAP postcode lookups.

Code health

Actively developed (last commit 2026-07-08) with meaningful version history. Only tests are SQL Server unit tests in ContactCentreDatabase.Tests (sqlproj) — no C# unit tests for the service logic. README is thin but not pure boilerplate. Web.config contains plaintext credentials for the Allies/Webservices.nl postcode services.

Modernisation risks

High: an actively-changed production SOAP service pinned to .NET Framework 4.7.2 with no ASP.NET Core migration path for ASMX; it owns the schema of the heavily shared ContactCentre database, and its ServiceClient package is consumed across the estate (high fan-in), so replacing it means coordinating many consumers. Plaintext third-party credentials in config need moving to a secret store regardless of any rewrite.