Appearance
Reference
Hosting Abstractions
IChannel
Used by the proxy to transmit a message to an endpoint
IDispatcher
Used by the host to execute the operation on the service being hosted
IEndpoint
Used by a host to listen and recieve message
IMessageSerializer
Single globally registered serializer - seraliezes and deserializes every opertion request and response
INFO
In the future instead of being global it should be configured per Binding / Transport
Hosting
DefaultDispatcher
- Starts diagnostic activity
- Flows ambient context based on policy
- Adds ambient context based on policy to logging and tracing scope properties
- Invokes service operations via reflection
ErrorInterceptor
Intercepts any exceptions on the host side and logs them
JsonMessageSerializer
Default serializer
ProxyFactory
Returns a DynamicProxy for a service interface intercepted by ProxyInterceptor
ProxyInterceptor
- Starts diagnostifc activity
- Locates the channel using the transport factory
- Sends message using IChannel
TransportFactory
Provides the channel for a given interface
Context
Abstractions
IAmbientContext
Store and retrieve ambient context
IContextFlowPolicy
Copy AmbientContexts between source and destination on request or response Return Scope properties for logging and tracing based on the AmbientContext
Implementaiton
AmbientContext
Default implementaiton for storing AmbientContext using ConcurrentDictionary
SerializedContext
Combines conccurent dictionary with IMessageSerializer when transfering across service boundaries
Proxy
Indirectly resolve a proxy via s_asyncLocalLifetimeScope
Transports
InProc
Binding, Endpoint, Channel, Transport for communicating between services hosted in the same process.
InProcBinding
InProcChannel
InProcEndpoint
InProcTransport
Azure Relay
Binding, Endpoint, Channel, Transport for communicating between services over the Azure Hybrid Relay
RelayBinding
RelayChannel
RelayConfig
RelayEndpoint
RelayTransport
NamedPipe
Binding, Endpoint, Channel, Transport for communicating between services over NamedPipe
TIP
This binding is slow
Intended for experimenting with hosting topologies without relying on an external framework for discovery or manually configuring ports.
NamedPipeBinding
NamedPipeChannel
NamedPipeEndpoint
NamedPipeEventBinding
NamedPipeEventChannel
NamedPipeEventEndpoint
DANGER
- No reliablity
- No retry
Do not use NamedPipeEventEndpoint in production, uses a System.Threading Channel internally,
NamedPipeEventTransport
NamedPipeExtensions
NamedPipeTransport
Sevice Bus Queue
Binding, Endpoint, Channel, Transport for communicating between services over Azure Service Bus
SBConfig
SBQueueBinding
SBQueueChannel
SBQueueEndpoint
SBQueueExtensions
SBQueueTransport
Unsafe Thread Channel
Binding, Endpoint, Channel, Transport for communicating between services hosted in the same process
DANGER
- No reliablity
- No retry
Do not use UnsafeThreadChannelEndpoint in production, uses a System.Threading Channel internally,
UnsafeThreadChannelBinding
UnsafeThreadChannelChannel
UnsafeThreadChannelEndpoint
UnsafeThreadChannelExtensions
UnsafeThreadChannelTransport
UnsafeThreadEventChannel
Topology
Datamodel that defines which services are hosted. Transports the services communicate using, and boundaries between subsystems.
Binding
Contract and Transport for communication
Client
Binding information to reach a service
Host
Makes a component available over an endpoint
- Implementation Type
- Endpoints - List of multiple binding to listen on to provide the service
- Isolated ServiceCollection definition to be used by the implementation
Host Mock
Concrete implemntation object for a Host instead of the Type for use during testing
Subsystem
- EntryPoint - Host defined as single point of entry accessible by other services in the system
- Components - Hosts that are only accessible to other services defined within the SubSystem
- Clients - Bindings for services that are accessible within the subsystem
System
- List of subsystems hosted in the current process
- List of clients that the process can use (depending on binding) to access in process or over the network.
Transport
- Address to listen on or connect to
- Concrete Channel to use for proxies
- Concrete Endpoint to use as listener when hosting