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.
Health score
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.
Facts
| Languages | csharp, sql |
| Frameworks | ASMX/SOAP, Autofac, SSDT |
| Runtimes | .NET Framework 4.7.2 |
| Tests / CI | some / CI in place |
| Last commit | 2026-07-08 |
| Owner | Owner unknown (mapping to be curated) |
| Domain | Contact centre and CRM (system generated; curate in repo-owners.json to override) |
| Product area | Phenix |
| Hosted | On-prem Deployed to our own machines
|
| Releases | 3 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 |
| Integration | soap, wcf, rest, redis |
| Source | Open in Azure DevOps |
Risk flags
Each flag links to its glossary definition.
Dependencies in context
Entanglement
kernel Bound into the core by 3 mechanism(s).
- Pinning dependency: application-framework, phenix-feature-service
- Speaks WCF (client)
- Shares core database sqlserver:ContactCentre
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 applicableNot 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 insteadThis 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 insteadThis 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
proposedRetire 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
proposedRaise 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
proposedAssessment 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.