Skip to content

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 an IQbservable<T> service (hot or cold).
    • Supports hosting any IQbservable<T> query as a service, where you implement an IQbservableProvider entirely yourself; however, this is not trivial, so I recommend using the IObservable<T> host instead.
  • 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 and Subscribe.
    • All IQbservable<T> Rx operators are supported.
  • 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.
  • 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.
Clone this wiki locally