Namespace Azos.Glue
Classes
ArgsMarshallingAttribute
Decorates methods stipulating type of RequestMsg-derivative used for method call arguments marshalling
AuthenticationSupportAttribute
Indicates that contract supports authentication using AuthenticationHeader. When header is passed then Glue server will use its data to set user context through Application.SecurityManager. If this attribute not set then Glue runtime will ignore AuthenticationHeader
Binding
Represents a particular named binding. Binding type defines a protocol by implementing a transport instance management strategy that support particular technology, such as blocking TCP or async ZeroMQ. Binding instance retains state/config information about all transports and has logic for Node's host:service resolution. Bindings are services, meaning - they can have state/threads that manage transport channels that operate under binding
CallSlot
Represents a class that is immediately returned after transport sends RequestMsg. This class provides CallStatus and RequestID properties where the later is used to match the incoming ResponseMsg. CallSlots are kinds of "spirit-less" mailboxes that keep state about the call, but do not own any threads/call events. Working with CallSlots from calling code's existing thread of execution is the most efficient way of working with Glue (in high load cases), as it does not create extra object instances (tasks do) for asynchronous coordination and continuation. It is possible to obtain an instance of CallSlot.AsTask in which case that instance is registered with the framework-internal reactor so task does complete normally even on timeout, however, in high-throughput apps (10K+ calls per second) this method is not the most efficient one as it allocates additional objects (task, list entry etc.) that eventually increase GC load for long runs. Note: A 3.2 Ghz 4-Core I7 server with 8Gb of ram can easily handle 50K+ 2-way calls a second (given little business server logic and simple payload). See also: CallReactor class
ClientCallException
Thrown by the Glue framework when clients try to perfom a call but that action fails
ClientEndPoint
Represents an ancestor for client classes that make calls to server endpoints. This and descendant classes are thread safe ONLY for making non-constructing/destructing remote calls, unless ReserveTransport is set to true in which case no operation is thread safe
ClientMsgInspectionException
Thrown by the Glue framework when client message inspector fails with exception
ClientTransport
ClientTransport<TBinding>
ConstructorAttribute
Decorates methods that initialize instance of the server class and retain class instance in the server runtime
DestructorAttribute
Decorates methods that finalize instance of the server class and release class instance in the server runtime
EndPoint
Abstraction of server and client endpoints. And endpoint is a logically-connected entity per: ABC rule - Address/Binding/Contract(s)
GlueComponent
Provides base functionality for internal glue component implementations
GluedAttribute
Decorates interfaces that represent glued contract points
GlueException
Base exception thrown by the Glue framework
InvalidGlueOperationException
Base exception thrown by the Glue framework when some operations are invoked that do not apply
LifeCycleAttribute
Specifies the instance mode and timeout values for server classes that implement the decorated contract. If server class does not support state then timeout is ignored
MessageSizeException
Exception thrown in client/server when there's an attempt to send a too large message
MsgInspectorConfigurator
Provides general configuration reading logic for message inspectors
NOPGlue
OneWayAttribute
Decorates methods that do not generate response message after execution. They must return void and if exception occurs it is not reported to the caller
ProtocolException
Exception thrown when there are protocol-related errors like deserialization, request message received when response is expected
Provider
Represents a base type for providers - providers are facades for some low-level implementation that transports use, for example ZeroMQ.
RemoteException
Base exception thrown by the Glue framework when remote errors are reported back to caller
ServerCall
In the server side code, provides access to server call ambient context. Use to access Headers
ServerContractException
Exception thrown when server could not get contract
ServerEndPoint
Represents a server endpoint that accepts client requests. This is a sealed class
ServerException
Exception thrown in Glue server
ServerInstanceActivationException
Exception thrown when server instance can not be created
ServerMethodInvocationException
Exception thrown when server can not invoke method
ServerNotRunningException
Exception thrown in Glue server when it shuts down/not running
ServerTransport
ServerTransport<TBinding>
StatefulServerInstanceDoesNotExistException
Exception thrown when statful server identified is not found/has expired/timed-out
StatefulServerInstanceLockTimeoutException
Exception thrown when statful server instance is not thread safe and could not be locked before set timeout expired
ThreadSafeAttribute
Indicates that server instance should not be lock()-ed by Glue handler because it is implemented in a thread-safe way. This attribute has no effect for Glue servers that are not [LifeCycle(Stateful)], because they are never locked. Singleton servers must be thread-safe by definition so this attribute is not needed for Singleton servers. If the server is implemented in a thread-safe way, then addition of this attribute may give 15-30% performance boost from Glue runtime when many parallel requests are trying to work with the same instance, however this benefit may be nullified by inefficient user locking code within server implementation. Leaving this attribute out is safer
Transport
Transports are thread-safe and are intended for use by multiple threads from ClientCallReactor and ServerProcessor when bindings operate in OperationFlow.Asynchronous mode. Transports are acquired by the thread that creates them
Structs
Node
Represents a network node. It is a binding, logical address of a host and a service that host provides Nodes are not contract-dependent. The componets of address are not case-sensitive. The form of the address is:
binding://host:service
. The "host" and "service" segment syntaxes depend on binding and may not contain the ':' char.
An example of some 'mytest' binding: 'mytest://adr=1.1.1.1,nic=eth001:job,chat,backup'
Interfaces
IClientMsgInspector
Inspects messages on the client side. ClientInspectors may be registered on ClientEndPoint, Binding or Glue levels
IGlue
Represents a contract for Glue - a technology that provides asynchronous distributed component interconnection
IGlueImplementation
IMsgInspector
Denotes an entity that can inspect messages
IServerMsgInspector
Inspects messages on the server side. ServerInspectors may be registered on ServerEndPoint, Binding or Glue levels
Enums
CallStatus
Stipulates codes returned for contract calls
DumpDetail
Message/data dumping detail
LogSrc
Logging sources - client, server, any
OperationFlow
Stipulates operation flow kind - sync/async
ServerInstanceMode
Denotes server instance modes - how server instances relate to calls
TransportKind
Defines kinds of transport