-
Notifications
You must be signed in to change notification settings - Fork 20
Features
Dave Sexton edited this page Jul 23, 2016
·
9 revisions
- Targets .NET 4.0, .NET 4.5.2 and .NET 4.6.1.
- A portable version of the core library (without a provider implementation) is also available.
- Works immediately with pre-built transport providers.
- TCP with binary serialization is provided by the optional Qactive.Providers.Tcp package on NuGet.
- WebSocket with C# script serialization and/or binary serialization is coming soon!
- Extensible so that any kind of custom transport can be used; however, it's not trivial to implement due to Qactive's special features, such as duplex communication, subscription argument support and security mechanisms. For this reason, I recommend using the built-in providers.
- Extensive tracing for logging and diagnostics.
- Simple methods (factory or extension) for hosting an
IQbservable<T>
service.- Supports hosting any
IObservable<T>
query as anIQbservable<T>
service (hot or cold). - Supports hosting any
IQbservable<T>
query as a service, where you implement anIQbservableProvider
entirely yourself; however, this is not trivial, so I recommend using theIObservable<T>
host instead.
- Supports hosting any
- Expression tree visitors may be supplied on the server, giving you an easy opportunity to validate and rewrite incoming queries before Qactive executes them. This should almost entirely avoid the need for custom
IQbservableProvider
implementations. - Simple "DataContext"-like object for acquiring a reference to an
IQbservable<T>
service from a client.- You must only specify the end point address and the expected return type. The result is an
IQbservable<T>
that you can query andSubscribe
. - All
IQbservable<T>
Rx operators are supported.
- You must only specify the end point address and the expected return type. The result is an
- Automatically serialized Expression trees, anonymous methods and types.
- Dynamic expressions and debug info expressions are not supported. All other types of expressions are supported.
- Extensible so that any kind of custom serialization mechanism can be used; however, it's not trivial to implement since it probably requires an expression visitor to rewrite query placeholders, compiler-generated methods and closures, and also object references must be preserved. For this reason, I recommend using the built-in serialization.
- Light-weight, high-performance binary serialization is coming soon!
- C# script serialization is coming soon!
- Immediate evaluation of local members and closures (optional; default behavior)
- Compiler-generated methods are executed locally and replaced with their return values before the expression is transmitted to the server. This includes iterator blocks, which are serialized as
List<T>
. - Evaluation assumes that local methods are never executed for their side-effects. Actions (
void
-returning methods) cause an exception. Do not depend upon the order in which members are invoked.
- Compiler-generated methods are executed locally and replaced with their return values before the expression is transmitted to the server. This includes iterator blocks, which are serialized as
- Full duplex communication (optional; default behavior for
IObservable<T>
closures)- Must opt-in on server.
- May opt-in on client for full duplex communication of all local members; automatic for
IObservable<T>
closures. - Duplex communication automatically supports iterator blocks.