Skip to content

Features

Dave Sexton edited this page Jul 23, 2016 · 9 revisions
  • Works immediately with pre-built transport providers.
    • TCP with binary serialization is provided by the optional Qactive.Providers.Tcp package on NuGet.
    • Extensible so that any kind of custom transport can be used, although it's not trivial. The serialization mechanism can also be overridden, and it's surprisingly difficult to get right as well. It generally requires an expression visitor to rewrite compiler-generated methods and closures, and object references must be preserved.
  • Simple server factory methods for hosting a Qbservable service.
    • Supports hosting any IObservable<T> query as a service (hot or cold).
    • Supports hosting any IQbservable<T> query as a service.
  • Simple client factory methods for acquiring a Qbservable service.
    • 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 Qbservable Rx operators are supported.
  • Automatically serialized Expression trees.
    • Dynamic expressions and debug info expressions are not supported. All other types of expressions are supported.
  • Automatically serialized anonymous types.
  • 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.
  • Designed with extensibility in mind; e.g., supports custom Qbservable service providers, protocols and sinks.
  • Extensive tracing for logging and diagnostics.
Clone this wiki locally