Zyan Communication Framework

Easy to use distributed application framework for .NET, Mono and Xamarin.Android.

Why use Zyan Communication Framework?

Easy to use

Zyan is very easy to learn and use. It provides clean intuitive API (see examples below) for hosting and accessing remote components.

Supports desktop and mobile

Zyan runs on Windows, Linux, MacOS and Android platforms supporting .NET 3.5+, Mono 2.10+ or Mono for Android 4.7+ frameworks.

Compact and secure

Supports transparent realtime traffic compression and encryption, even on mobile devices. Doesn't require digital certificates.

Unobtrusive

All you need is plain .NET classes and interfaces: no ServiceContract/OperationContract attributes, no MarshalByRefObjects are necessary (see more details below).

Multiprotocol

Supports TCP, HTTP and Named pipes natively on most platforms. Extensibility model allows plugging any custom transport protocols.

Full duplex TCP

Supports bidirectional TCP communication through client-side NAT and firewalls.

LINQ-enabled

Supports LINQ queries to the remote components. Allows passing serialized LINQ expressions over network and generating anonymous classes on demand.

Extensible

Plug in custom transport protocols, session manager, authentication provider, and more. Build loosely coupled client-server systems using Zyan and MEF.

Supports events

Distributed events are as easy as button_Click in Windows Forms applications. Distributed Event-Based Components (EBC) are supported out-of-the-box.

Supports duck typing

Zyan is able to host component that matches an interface, but doesn't implement it.

Unit tested

Zyan code is extensively covered with unit tests and integrational tests. Integrational tests are executed on Windows and Linux using Mono.

Enterprise ready

Zyan Framework is used in commercial enterprise applications. Check out the «Who uses Zyan Communication Framework» section below.

Actively supported

Our community provides free technical support in English, German and Russian. Most of your questions are answered within hours!

Well-documented

Comprehensive documentation covers all aspects of Zyan API. Check out source code repository for several example application.

Absolutely free

Zyan is distributed under the terms of MIT license. It can be used in any applications, including closed-source and commercial.

What does the application code look like?

Server-side

Client-side

Why is it better than WCF?

  • You don't have to decorate your interfaces with ServiceContract and OperationContract attributes: every method is a part of the contract.
  • You can use overloaded methods, which isn't possible with WCF. Service contracts produce WSDL, which doesn't support method overloading (all operations must be uniquely named).
  • You can call methods with generic parameters, which is also impossible with WCF. What's worse, these constraints cannot be validated at compile-time, so malformed WCF contracts throw exceptions at runtime.
  • There is no need to create separate callback contract for the duplex communication — just pass in a delegate as an argument to the remote method, or subscribe to a remote event using familiar syntax.
  • You are not forced to specify component activation mode using attributes at compile time. ZyanComponentHost can be configured to activate any component in a single-call (default) or a singleton mode.

Why is it better than .NET Remoting?

  • You don't have to derive your component from MarshalByRefObject. Any .NET class can be used as a hosted component.
  • With the duck typing feature, you can bind a component to an interface it doesn't implement (provided that all interface methods are implemented). This way you can make any third-party class remotely callable.
  • You can set up custom serialization handlers for data types that aren't serializable. This way you can make any third-party class serializable.
  • You can query remote components using LINQ, even with projections to anonymous classes. LINQ expressions can be passed as method arguments and returned from remote methods. This feature relies on custom serialization handlers mentioned above.
  • There is no need for special treatment to use events, everything works just out-of-the box. Subscription to the remote event looks exactly the same as local subscription.

Why is it better than other RPC frameworks?

  • Zyan is more than just an RPC framework. It is in fact a skeleton for a full-featured application server with a built-in authentication, session management, policy injection features, etc.
  • Authentication system is fully customizable. You can use integrated Windows authentication (single sign on) or plug in your own authentication provider.
  • Session management is also customizable. Fast and slim in-process session manager can be used for self-hosted single-process application servers. SqlServer-backed session manager is suitable for multi-process clusters. You can easily create your own session manager by inheriting from the base class and overriding a few virtual methods.
  • Zyan supports transparent traffic compression (using Deflate or LZF algorithm) and encryption out-of-the-box. Encryption feature doesn't require certificates and is not platform dependent.

What are other benefits of Zyan?

  • Managed Extensibility Framework integration (only available for .NET 4.x and Mono 2.10) allows building loosely coupled client-server applications. You can set up your application server declaratively using MEF attributes and publish it with a Zyan host.
  • Client application can use MEF container to access remote services. Both client and server can be completely unaware of the communication layer being used.
  • Zyan supports wiring distributed Event-Based Components. EBC is an architectural model which reduces dependencies between components. Components in EBC application communicate with each other by means of messages instead of invoking methods.
  • Other notable features of Zyan include call interception, deterministic resource cleanup, duplex TCP communication, server-side event filters, session-bound events, OneWay methods support, centralized exception handling, and many more.

Who uses Zyan Communication Framework?

International Risk Partnership is an independent consultancy. We're using the Zyan Framework to connect several parts of our suite of Risk Management products together, to give our users maximum flexibility in deployment. We've deployed elements locally, across a LAN and even on Amazon AWS (for instance, connecting from UK to Australia) without issue using TCP duplex connections.

Of particular interest to us and to our clients is the ability to communicate encrypted data quickly – vital for our line of business.

Typically we have one or more control applications using duplex TCP to a remote server running our Data Manager. This in turn connects to our Central Logic via IPC. The Central Logic implements a queue and multi-threaded engines thus releasing the Data Manager quickly to prepare the next call.

In summary we use:

  • Duplex TCP channel for inter-network calls
  • A callback registry of clients so we can pass data back and forth between multiple connected clients (and to the correct client!)
  • Encryption for safe data transfer.
  • IPC binary channel for calls on the same machine, to keep our logical business processes separate and therefore maximise resources, and to get maximum connection speed.

Trying to use TCP Remoting without the Zyan Framework would never have got off the ground – just glad we came across it. Also, we have received excellent service and support with even the most inept questions – thanks to you both for this!

– Dave Grafton
2013


ULTIMA Businessware is a software development company based in Moscow, Russia. Our flagship product is a large-scale enterprise resource planning system, and the current development version runs on top of Zyan Framework.

We have also integrated duplex TCP channel, apart from Zyan Framework itself, into stable version of ULTIMA ERP to enable reliable server callbacks for the clients working behind NAT and firewalls. This version is already delivered to our current clients, mostly large retail stores in several different regions of Russia. We use pretty much every feature Zyan Communication Framework has to offer, including

  • Traffic compression and encryption
  • Duplex TCP connection
  • Custom authentication manager
  • Custom persistent session manager
  • Distributed LINQ queries
  • Call interception for result caching
  • MEF integration (both client-side and server-side)
  • Session-bound events
  • Event filters
  • Load context-independent assembly resolution
  • Android version of the library

– Alexey Yakovlev
2013


Fire-fighting departments in Germany use Zyan-powered application to control the state of the fire-fighting vehicles (sorry, no website yet).

The software has a client-server architecture. Each fire truck sends analog radio signals to headquaters. These signals are decoded using a third party hardware component at a centralized server. Server gets state through a decoder and sends to all clients. At any client site, the information worker can create a dashboard of all fire trucks he wants to monitor. The following Zyan features are used:

  • Duplex TCP connection between server and clients
  • IPC connection between udpate service and server
  • Events (client sends delegates to server. Delegates are invoked by the server)

Furthermore i want to thank Rainbird for his great support. Many thanks to you, Rainbird.

– Caldicot
2012


We are using Zyan for our Inhouse-Development of an ERP-System. Long time ago we are using a OpenSource ERP, but we have Special Needs and the "old" System wasn't develop again.

So we start on January 1, 2013. with a new Project. Now in December will will release our first Version to do the inventure. We plan to Change the ERP complete at end of year 2014. Here some Highlights:

  • Client-Server architecture (Communication with Zyan - TCPDuplex)
  • Full .NET development (WPF - MVVM - Entity Framework) - most of the code is written in VB.NET
  • VPN Optimization (we Transfer only needed Data)
  • Realtime functions for inform Client for updates
  • MEF for a modulbased development and extensibilitiy
  • Only using Standard Projects or open source Projects to do main Goals (ex.: MS SQL / MS Reporting Services, ...)

Thank you very much for your good work and helpfull support.

– Michael Kolowicz
2013


Zyan Drench is a simple yet very entertaining game developed using Zyan Communication Framework.

Game board is a random picture of size 15x15. Start from the top-left corner of the board. Select a new color for the top-left pixel, and all adjacent pixels of the same color will be painted over with the new color. The goal is to drench the whole board with your own color.

Zyan Drench has several modes: play against Android phone (with adjustable skill level), play solo (classic single-player mode) and network game over Wifi. It is completely ad-free and open source, hosted at https://github.com/yallie/drench.

The game uses the following features of Zyan library:

  • Duplex TCP channel
  • Events to synchronize devices
  • Android version of the library

– Kind regards, yallie
2014


I use your framework in my DronePhone GPS Tracker system to transfer GPS position information from my UDP server (which accepts the position data from a Windows Phone mounted on a flying quadcopter) to a Bing map client, where the real-time position of the drone is displayed. So far, it works very well.

I wrote my own UDP stuff, but your software made the TCP server to the WPF map clients very easy.

You can see more info here:
https://phantompilots.com/viewtopic.php?f=4&t=2700&p=18719

A video of a flight synchronized with the DronePhone Map client:
https://www.youtube.com/watch?v=DS3cgnEKpKY

It is best watched at full screen, 1080p.

Enjoy, and thanks for the great software!

– Swifter
2013

If you have used Zyan in your own projects, please share the details of your application, help other customers to make a decision!