Skip to content

Activation and hosting

SAIF.Employer.Lookup.Service publishes four operations through three .asmx marker files, which are served by IIS under the EmployerLookupService virtual directory, and it produces two deployable variants: an internal build that exposes all three services and an external build that omits the code table service.

Activation mechanism

Aspect Finding
Mechanism .asmx marker file + codebehind
Marker files 3
Directive form <%@ WebService Language="vb" CodeBehind="EmployerLookup.asmx.vb" Class="SAIF.Employer.Lookup.Service.EmployerLookup" %>
Route table Not used
<system.serviceModel> Not present
Address composition Application base address + the marker file's path within the project

Global.asax configures logging at application start and registers nothing else, so the marker files are the only way a request reaches a service class.

Marker file inventory

Marker file Language Codebehind Class Address suffix
EmployerLookup.asmx vb EmployerLookup.asmx.vb SAIF.Employer.Lookup.Service.EmployerLookup /EmployerLookup.asmx
CoverageCheck.asmx vb CoverageCheck.asmx.vb SAIF.Employer.Lookup.Service.CoverageVerifier /CoverageCheck.asmx
Reference/CodeTables.asmx vb CodeTables.asmx.vb SAIF.Employer.Lookup.Service.CodeTableService /Reference/CodeTables.asmx

Two of the three marker file names differ from the class they activate. A caller addresses CoverageCheck.asmx, and the class that answers is CoverageVerifier. Reference/CodeTables.asmx carries its subfolder in the address.

Activation diagram

The following diagram visualizes how a request reaches an operation.

flowchart TD
    REQ["Caller request<br>/EmployerLookupService/EmployerLookup.asmx"] --> IIS["IIS maps .asmx<br>to the ASP.NET handler"]
    IIS --> DIRECTIVE["WebService directive<br>names SAIF.Employer.Lookup.Service.EmployerLookup"]
    DIRECTIVE --> INST["EmployerLookup constructed<br>per request"]
    INST --> ACTION{"SOAP action"}
    ACTION -->|"FindEmployerByPolicyNumber"| WM["WebMethod invoked"]
    ACTION -->|"GetEmployerContacts"| WM
    ACTION -->|"Unknown"| FAULT["SOAP fault"]
    WM --> RESP["Response message"]

Metadata and test surface

Aspect Finding
WSDL document EmployerLookup.asmx?wsdl, CoverageCheck.asmx?wsdl, Reference/CodeTables.asmx?wsdl
ASP.NET test page Enabled (HttpGet / HttpPost protocols)
Documentation protocol Enabled

Web.config does not declare a <webServices><protocols> element and does not remove the documentation protocol, so anyone who can reach the service can read each WSDL and invoke every operation from the generated test page. This is raised in Tech debt.

Host inventory

This repository contains more than one deployable project. Each web service project has its own document set; this table places this one among them.

Project Kind Services Document set
SAIF.Employer.Lookup.Service Web service EmployerLookup, CoverageVerifier, CodeTableService This set
SAIF.Employer.Lookup.Service.X86 Web service CoverageVerifier SAIF.Employer.Lookup.Service.X86
SAIF.Employer.Lookup.Data Class library - Embedded library
SAIF.Employer.Lookup.Service.Tests Test project - Not documented

Services hosted in more than one host

Service class Also deployed by Implementation shared Primary document set
CoverageVerifier SAIF.Employer.Lookup.Service.X86 Same file (linked from src/SAIF.Employer.Lookup.Service/CoverageCheck.asmx.vb) SAIF.Employer.Lookup.Service

The x86 host compiles the same codebehind file into its own assembly, so there is one implementation and two deployments.

Deployment variants

Variant Build configuration Artifact Config transform Audience Notes
Internal Release SAIF.Employer.Lookup.Service.Internal.zip Web.Release.config SAIF applications on the corporate network All three services are published
External ReleaseExternal SAIF.Employer.Lookup.Service.External.zip Web.ReleaseExternal.config Partner systems outside the corporate network Reference/CodeTables.asmx is excluded from the build in the project file

Variant differences

Setting or behavior Internal External Source
MaxSearchResults (appSettings) 500 25 src/SAIF.Employer.Lookup.Service/Web.Release.config, src/SAIF.Employer.Lookup.Service/Web.ReleaseExternal.config
Services exposed All EmployerLookup, CoverageVerifier src/SAIF.Employer.Lookup.Service/SAIF.Employer.Lookup.Service.vbproj

IIS configuration

Aspect Finding
Site / virtual directory Virtual directory EmployerLookupService under Default Web Site
Application pool SAIF-EmployerLookup (.NET CLR v4.0)
Platform target Any CPU
httpErrors mode Not declared
Custom modules or handlers None
  • Index
  • Overview
  • Architecture
  • Operations
  • Faults and error pipeline
  • Authentication and authorization
  • Dependencies
  • Configuration
  • Operations and processes
  • Business rules
  • Data model
  • Operational runbook
  • Tech debt
  • Embedded libraries

Sources

  • src/SAIF.Employer.Lookup.Service/EmployerLookup.asmx
  • src/SAIF.Employer.Lookup.Service/EmployerLookup.asmx.vb
  • src/SAIF.Employer.Lookup.Service/CoverageCheck.asmx
  • src/SAIF.Employer.Lookup.Service/CoverageCheck.asmx.vb
  • src/SAIF.Employer.Lookup.Service/Reference/CodeTables.asmx
  • src/SAIF.Employer.Lookup.Service/Reference/CodeTables.asmx.vb
  • src/SAIF.Employer.Lookup.Service/Global.asax
  • src/SAIF.Employer.Lookup.Service/Web.config
  • src/SAIF.Employer.Lookup.Service/Web.Release.config
  • src/SAIF.Employer.Lookup.Service/Web.ReleaseExternal.config
  • src/SAIF.Employer.Lookup.Service/SAIF.Employer.Lookup.Service.vbproj
  • src/SAIF.Employer.Lookup.Service.X86/SAIF.Employer.Lookup.Service.X86.vbproj
  • Pipelines/employer-lookup-release-vars.yml