About the project - GenuineChannels/GenuineChannels GitHub Wiki

Genuine Channels

http://test.labdotnet.com/GenuineChannels/GenuineChannels.html

Genuine Channels implement bidirectional TCP channels (for .NET Remoting infrastructure) that solve the primary problem of native tcp channels and all sequential issues. Also they implement some features that help to build durable, viable and stable client-server solutions.

Brief explanation

Microsoft .NET Framework implementation of TCP channels allows using TCP channel only as a server or client connection. If you want to provide feedback from the server to client, server must connect to the client’s port. This scheme consumes two TCP sockets and is not workable if client is behind NAT or Masquerade server. Also, native implementation closes TCP connection after non-customized period of time.

Genuine Channels use the only connection from the client to the server. There is no problem if client is behind firewall, NAT or Masquerade server. Also, Genuine Channels implement some features to help building durable, viable and stable client-server solution.

Features

  • Only one TCP connection is used between client and server.
  • Fully compatible with .NET Remoting infrastructure.
  • Each connection has queue of messages being sent.
  • Constraints on the queue are possible. It greatly helps to force reconnection if current connection is too slow.
  • Automatic client reconnection to the server. Server and Clients does not lose messages during reconnection. It’s very useful if your server must talk to the client.
  • Full support of sync, async and one-way messages.
  • Adjustable timeout to wait for reply from the remote host.
  • Real async processing. You can have any number of threads at a server and at a client that will automatically use the same TCP connection.
  • Each exception has unique identifier that simplifies centralizing error processing or translating error messages to any language.
  • Automatic ping to check TCP connection if connection has not been used for (by default) 120 seconds.
  • Detailed logging system that receives all events and can save even the entire incoming and outcoming TCP streams as well as exceptions, stack traces and object’s guids. You can write your own logger and attach it to the system.

Dmitry Belikov
January 17th, 2003