Welcome to Eneter.Messaging.Framework.
Eneter Messaging Framework is a lightweight framework for the interprocess communication. It is easy to use and it works across multiple platforms. The framework provides communication components you can use to create various communication scenarios.
This topic contains the following sections:
The framework is provided for multiple platforms. You can use it for the communication between applications from the same platform as well as for the communication between applications running on different platforms.
The following platforms are supported:
.NET 3.5, 4.0, 4.5
Xamarin for Android and iOS
Xamarin for iOS
Java for Android 2.3.3 (or later)
The framework for .NET supports following protocols and transportation mechanisms:
TCP - for communication between processes running on different machines. Eneter.Messaging.MessagingSystems.TcpMessagingSystem
WebSocket - for communication between processes running on different machines. It provides bi-directional, full-duplex communication in environments which block non-standard Internet connections using a firewall.Eneter.Messaging.MessagingSystems.WebSocketMessagingSystem
HTTP - for communication between processes running on different machines. It works in environments blocking non-standard Internet connections using a firewall.Eneter.Messaging.MessagingSystems.HttpMessagingSystem
UDP - for communication between processes running on different machines. For short and fast messaging. Delivery of packets is not guaranteed. It also supports multicast and broadcast communication.Eneter.Messaging.MessagingSystems.UdpMessagingSystem
Shared Memory - for very fast communication between processes running on the same machine.
Named Pipes - for communication between processes running on the same machine. Eneter.Messaging.MessagingSystems.NamedPipeMessagingSystem
Android USB Cable - for communication between computer and Android device connected via the USB cable.Eneter.Messaging.MessagingSystems.AndroidUsbCableMessagingSystem
Thread Messaging - for communication between threads running in the same process. Eneter.Messaging.MessagingSystems.ThreadMessagingSystem
Communicated messages are encoded by a serializer. To serialize/deserialize messages the framework supports:
XmlStringSerializer - serialization to XML (works for the communication between .NET and Java).
DataContractXmlStringSerializer - serialization to XML using DataContract and DataMember attributes.
- serialization to JSON using DataContract and DataMember attributes.
BinarySerializer - for fast serialization using the binary format (does not work for the communication between .NET and Java).
AesSerializer - for encrypting using Advanced Encryption Standard (works for the communication between .NET and Java).
RijndaelSerializer - for encrypting using Rijndael algorithm.
GZipSerializer - for compressing big messages before sending across the network (works for the communication between .NET and Java).
RsaSerializer - for encrypting messages by RSA algorithm using public and private keys (works for the communication between .NET and Java).
RsaDigitalSignatureSerializer - for using digital signature to verify who sent the message and that the message was not changed (works for the communication between .NET and Java).
To implement the communication between applications the framework provides functionality to send and receive messages as well as the communication using RPC (Remote Procudure Calls):
String Messages - for sending and receiving text messages. Eneter.Messaging.EndPoints.StringMessages
Typed Messages - for sending and receiving data structures of specified types (strongly typed messages). Eneter.Messaging.EndPoints.TypedMessages
Remote Procudure Calls - for invoking methods in another application. (works for the communication between .NET and Java).Eneter.Messaging.EndPoints.Rpc
It provides components to control routing of messages between applications:
Message Bus - for publishing multiple services from one place.Eneter.Messaging.MessagingSystems.Composites.MessageBus
Broker - for publish-subscribe scenarios (publisher sends messages to the broker and the broker notifies all subscribers). Eneter.Messaging.Nodes.Broker
Dispatcher - for routing messages to all connected receivers (e.g. for a service listening to TCP and HTTP at the same time). Eneter.Messaging.Nodes.Dispatcher
Router - for routing messages to preconfigured addresses. Eneter.Messaging.Nodes.Router
Backup Router - for routing messages to a backup service if the service is not available. Eneter.Messaging.Nodes.BackupRouter
Channel Wrapper/Unwrapper - for receiving multiple type of messages on one address (no need for if ... else ... statement in the user code). Eneter.Messaging.Nodes.ChannelWrapper
Load Balancer - for distributing workload across more computers (or processes). Eneter.Messaging.Nodes.LoadBalancer
The communication across the network is typically less reliable as a local call inside a process. The network connection can be interrupted or a receiving application can be temporarily unavailable. If your communication scenario requires to overcome these issues, the framework provides:
Monitoring of connection availability - for early detection of a disconnection. Eneter.Messaging.MessagingSystems.Composites.MonitoredMessagingComposit
Buffered messaging and automatic reconnect - for overcoming short disconnections (e.g. in case of unstable network). Eneter.Messaging.MessagingSystems.Composites.BufferedMessagingComposit
The communication across the network is easy to observe and confidential data can be acquired by unauthorized persons. Therefore, you may want to protect your communication:
Authenticated Connection - for verifying the identity of clients connecting to the service.Eneter.Messaging.MessagingSystems.Composites.AuthenticatedConnection
Encrypted Messages - AES or RSA serializers.Eneter.Messaging.DataProcessing.Serializing
Digitaly Signed Messages - for protecting authenticity and message integrity.RsaDigitalSignatureSerializer
SSL - for secured communication.