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"]
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