---
title: ActiveDirectory overview
summary: Which service this proxy calls, who consumes it, and what it is used for.
status: draft
owner: SAIF.Core documentation
last_reviewed: 2026-09-24
---

# ActiveDirectory overview

`ActiveDirectory` is a svcutil-generated `ClientBase<T>` proxy onto the external `clsADServices` ASMX service, fronted by the public wrapper `ActiveDirectoryServiceProxy` in `SAIF.Services.Web.Proxies`. Nothing in this repository constructs the wrapper; it is reachable only by external consumers of the `SAIF.SAIFCode.Core` package, in which `SAIF.Services.Web.Proxies` is packaged*.

## Purpose
- Look up a caller's default printer, check cached access to a named resource, and retrieve basic user contact information from Active Directory, all delegated to the external `clsADServices` web service*.

## Business context

| Attribute | Value |
| --- | --- |
| Business capability | Active Directory lookups (printer preference, cached authorization, contact info) for consumers of the `SAIF.SAIFCode.Core` package |
| Owning team of the called service | Not determined from source |
| Criticality to the consumer | Not determined from source |
| Fallback when unavailable | None — the calling operation fails; `HasAccess` returns no fail-safe default when the call itself throws |

## Consumers

| Consumer | Call site | Operations used | Notes |
| --- | --- | --- | --- |
| `SAIF.Services.Web.Proxies.ActiveDirectoryServiceProxy.GetDefaultPrinter` | `Services/SAIF.Services.Web.Proxies/ActiveDirectoryServiceProxy.cs:28` | [`GetDefaultPrinter`](reference.md#getdefaultprinter) | Returns the string unchanged |
| `ActiveDirectoryServiceProxy.HasAccess` | `ActiveDirectoryServiceProxy.cs:34-35` | [`HasAccessCacheExternal`](reference.md#hasaccesscacheexternal), [`HasAccessCache`](reference.md#hasaccesscache) | Selects the operation by the `useExternalDomain` flag; the wrapper method name `HasAccess` does not match either wire operation name |
| `ActiveDirectoryServiceProxy.GetContact` | `ActiveDirectoryServiceProxy.cs:40` | [`GetUserInfo`](reference.md#getuserinfo) | Maps `USERINFOSTRUCT` into a `SAIF.Core.Contracts.Contact` |

`ActiveDirectoryServiceProxy` is `public`, but nothing in this repository constructs it. `SAIF.Services`, `SAIF.Services.Common`, `SAIF.Services.WCF`, and `SAIF.Services.Tests` all hold a project reference to `SAIF.Services.Web.Proxies`, but none of them uses this type — a repository-wide search found no other match. The wrapper is reachable only by external consumers of the packaged assembly*.

## Capability summary

| Capability | Operations | Description |
| --- | --- | --- |
| Printer lookup | [`GetDefaultPrinter`](reference.md#getdefaultprinter) | Returns the configured default printer for a mail ID |
| Cached authorization check | [`HasAccessCacheExternal`](reference.md#hasaccesscacheexternal), [`HasAccessCache`](reference.md#hasaccesscache) | Returns whether a user has cached access to a named resource, internally or externally |
| Contact lookup | [`GetUserInfo`](reference.md#getuserinfo) | Maps a subset of Active Directory contact fields into a `Contact` |

## Generation provenance

| Aspect | Finding |
| --- | --- |
| Generated by | `svcutil` (Service Reference) |
| Generated from | `Services/SAIF.Services.Web.Proxies/Service References/ActiveDirectory/clsADServices.wsdl` |
| Discovery document | `Services/SAIF.Services.Web.Proxies/Service References/ActiveDirectory/clsADServices.disco` |
| Generated namespace | `SAIF.Services.Web.Proxies.ActiveDirectory` |
| Namespace matches the consuming project | Yes |
| Regeneration risk | The generated client is `internal` (`Reference.svcmap` `GenerateInternalTypes=true`); regenerating preserves that, so no external consequence beyond the usual regeneration risk of losing any hand edit to `Reference.cs` |

## Non-documented artifacts

- `Services/SAIF.Services.Web.Proxies/Service References/ActiveDirectory/Reference.cs` is svcutil tool output (a `System.ServiceModel`-based `ClientBase` partial class, the `clsADServicesSoap` service-contract interface, and per-operation `OperationContractAttribute`/`XmlSerializerFormatAttribute` decorations — the generator produced only synchronous method signatures, with no `*Async` overloads); this document set describes the contract from the `.wsdl` and the call sites instead, per the generated-code doctrine.

## Related documentation
- [Client index](index.md)
- [Architecture](architecture.md)
- [Contract](contract.md)
- [Operation map](operation-map.md)
- [Client reference](reference.md)
- [Consumption](consumption.md)
- [Dependencies](dependencies.md)
- [Tech debt](tech-debt.md)

> **Note:** Statements marked with `*` were inferred from code structure, naming
> conventions, or contextual evidence where direct confirmation was not available
> in source artifacts.

## Sources
- `Services/SAIF.Services.Web.Proxies/ActiveDirectoryServiceProxy.cs`
- `Services/SAIF.Services.Web.Proxies/Service References/ActiveDirectory/clsADServices.wsdl`
- `Services/SAIF.Services.Web.Proxies/Service References/ActiveDirectory/clsADServices.disco`
- `Services/SAIF.Services.csproj`
- `Services/SAIF.Services.Common/SAIF.Services.Common.csproj`
- `Services/SAIF.Services.WCF/SAIF.Services.WCF.csproj`
- `Tests/SAIF.Services.Tests/SAIF.Services.Tests.csproj`
