see on GitHub

Changes API : What is Changes API?

The RavenDB client offers a push notification feature that allows you to receive messages from a server about events that occurred there. You are able to subscribe to events for all documents, indexes and operations as well as to indicate a particular one that you are interested in. This mechanism lets you notify users if something has changed without the need to do any expensive polling.

Changes API on Secured Server

Changes API uses WebSockets under the covers. Due to the lack of support for client certificates in WebSockets implementation in .NET Core 2.0 the Changes API won't work for secured servers accessible over HTTPS.

This issue will be fixed in the final version of .NET Core 2.1 (Q2 2018). The fix is already available in daily builds of .NET Core 2.1. In order to workaround this you can switch your application to use .NET Core 2.1 (build 2.1.0-preview2-26308-01 or newer).

The issue affects only the RavenDB client, the server can be running on .NET Core 2.0.

Accessing Changes API

The changes subscription is accessible by a document store through its IDatabaseChanges interface.

IDatabaseChanges Changes(string database = null);

database string Name of database to open changes API for. If null, the Database configured in DocumentStore will be used.
Return value
IDatabaseChanges Instance implementing IDatabaseChanges interface.

Connection interface

IDatabaseChanges inherits from IConnectableChanges<TChanges> interface that represent the connection.

public interface IConnectableChanges<TChanges> : IDisposable
    where TChanges : IDatabaseChanges
    // returns state of the connection
    bool Connected { get; }

    // A task that ensures that the connection to the server was established.
    Task<TChanges> EnsureConnectedNow();

    //An event handler to detect changed to the connection status
    event EventHandler ConnectionStatusChanged;

    //An action to take if an error occured in the connection to the server
    event Action<Exception> OnError;


In order to retrieve notifications you have to subscribe to server-side events by using one of the following methods:


In order to end subscription (stop listening for particular notifications) you must Dispose it.

IDatabaseChanges subscription = store.Changes();
await subscription.EnsureConnectedNow();
subscription.ForAllDocuments().Subscribe(change => Console.WriteLine("{0} on document {1}", change.Type, change.Id));

    // application code here
    if (subscription != null)



To get more method overloads, especially the ones supporting delegates, please add Reactive Extensions Core package to your project.