Introduction
Eneter Messaging Framework is a lightweight framework for the interprocess communication based on messages.
Although the framework is lightweight (the assembly has about 300Kb), it provides quite comprehensive functionality allowing to implement advanced communication scenarios too.
(E.g. Service listening to HTTP and TCP at the same time, Communication across unstable network, Load Balancing, etc.)
The framework is free for non-comercial use (License) and runs in .NET 3.5, .NET 4.0, Windows Phone 7, Silverlight 3, Silverlight 4 and MONO 2.6.4.
Therefore, you can easily implement e.g. the communication between Windows Phone 7 and a standalone desktop application.
The framework can be downloaded from http://www.eneter.net.
Interprocess Communication
The communication between applications can be realized by various protocols or mechanisms. The right one depends on particular requirements. E.g. Are communicating applications on one machine? Are there any restrictions (e.g. Silverlight)?
The framework allows to implement the communication via:
- Shared Memory - for the very fast communication between processes running on the same machine (faster than Named Pipes)
- Named Pipes - for the communication between processes running on the same machine
- TCP - for the communication between processes running on different machines.
- HTTP - for the communication between processes running on different machines.
- Silverlight Messaging - for the communication between Silverlight applications.
Encoding
Messages can be encoded with using:
- XML Serializer - for simple serialization of messages into XML.
- XML Data Contract Serializer - for the serialization of messages into XML using DataContract and DataMember attributes
- Binary Serializer - for the fast serialization of messages into the binary format.
- AES Serializer - for encrypting messages using Advanced Encryption Standard.
- Rijndael Serializer - for encrypting messages using Rijndael encryption.
- GZip Serializer - for compressing big messages before sending across the network.
The communication API is not
bound to a particular protocol or encoding format, therefore your
implementation stays same, does not matter what you use.
Routing Messages
The routing functionality provides components that can be placed on the
communication path to control the sending behavior. E.g. forwarding
messages to subscribed receivers, forwarding messages to a different
address, load balancing, etc.
- Broker - for sending notification messages to subscribed clients (i.e. publish-subscribe scenarios).
- Router - for re-routing messages to a different address.
- Dispatcher - for routing messages to multiple receivers (the same request processed by more services in parallel).
- Load Balancer - for distributing workload across more computers (or processes, or threads).
- Channel Wrapper/Unwrapper - for receiving various types of messages on one address (no need for long "if ... then" statements to recognize the type of received messages.)
Reliability
The communication across the network is typically less reliable as a
local call performed inside the application. The network connection can
be interrupted, or the receiving application can be temporarily
unavailable. If your communication scenario requires to overcome these
issues, the framework provides the following functionality:
- Monitoring of the connection availability - for early detection of a disconnection.
- Buffering of sent messages in case of a disconnection and automatic reconnect - for overcoming short disconnections e.g. caused by an unstable network.
- Acknowledged messages - for confirmation if the message was delivered or not.
Security
The communication across the network is very easy to be observed and
confidential data can be acquired by unauthorized persons. Therefore you
may want to protect your data during the communication.
- HTTPS, SSL and fast symetric encryption by using AES or Rijndael serializers.
If you are interested in more technical details about the framework, you can visit
Eneter Online Info.
Enjoy the third version.