---
title: Monitor mirror services
slug: cms-11/dev-docs/monitoring-mirror-services-legacy
docTags: 
createdAt: 2026-07-22T19:45:18.655Z
---

:::hint{type="info"}
**Notes**
This content applies to Optimizely Content Management System (CMS) versions 10 and 11.

You can install mirroring only on Episerver CMS 7.5 (through the Deployment Center). If you want mirroring with the latest CMS version, install a CMS 7.5 site with mirroring, and then upgrade to the latest CMS through NuGet because there is no NuGet package for mirroring functionality; it is installed as a separate service in a virtual directory on the server. An updated DLL is available in the `EPiServer.CMS.Core` NuGet package (`packages/EPiServer.CMS.Core.9.0.0/tools/MirroringService/`), which you must manually patch to support CMS 10.

Optimizely CMO and Optimizely Customized Commerce do not support mirroring. Also, content mirroring is not supported in a cloud deployment such as Windows Azure Web Apps and Optimizely Digital Experience Platform (DXP).
:::

## Monitor mirror jobs

The Monitoring Server monitors mirroring jobs. When you start a mirroring job, the Mirroring Source Server sends an event (`MirroringStatusEventArgs`) for the state changing of the mirroring job to the monitoring server. A subscriber can follow mirroring states from start to end.

![](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/4YUcfxkrpmu7WJ4BzFjRW-20260722-194635.png "mirroring.png")

### Mirroring job states

| Mirroring job                 | State                                                                             |
| ----------------------------- | --------------------------------------------------------------------------------- |
| `MirroringJobInitialized`     | Sent after you initialized a mirroring job.                                       |
| `MirroringPackageInitialized` | Sent after you initialized a mirroring package (and sent info about the package). |
| `Transferring`                | Sent during transferring of a mirroring package.                                  |
| `Transferred`                 | Sent when you transferred the mirroring package.                                  |
| `MirroringPackageCompleted`   | Sent when you imported the package.                                               |
| `MirroringJobCompleted`       | Sent when you imported the last package and finished the entire mirroring job.    |
| `ExportingError`              | Sent if an error occurs during export.                                            |
| `TransferingError`            | Sent if an error occurs during transfer.                                          |
| `ImportingError`              | Sent if an error occurs during import.                                            |

### MirroringStatusEventArgs

| Event                      | Description                                                                                                                                           |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MirroringStatusEventArgs` | Contains a GUID, which is the mirroring job ID, and a `MirroringTransferData`.                                                                        |
| `MirroringTransferData`    | Contains `MirroringInitializeData`, `MirroringPackageBody`, `MirroringPackageHeader` and `MirroringStatus`.                                           |
| `MirroringInitializeData`  | Contains `Name`, `DestinationPageGuid`, `DestinationPath`, `DestinationRoot`, `LastExecution`, `NrOfFilesinPackage`, `NrOfPagesInPackages` and so on. |
| `MirroringPackageHeader`   | Contains ` FileSize`, `TargetFilePath`, `SizeOfSentData`, `SizeOfReceiveData`.                                                                        |
| `MirroringStatus`          | Contains `MirroringState` and `StatusLog` (contains information about Processing, Warning, and Error).                                                |

### Monitoring modes

| Monitoring mode      | Description                                                                                                                                                                                                                                                                                                |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Offline Monitoring` | The Mirroring Server, by default, logs states of a mirroring job as an XML file under `C:\\MirroringMonitoringData\`. The filename starts with a unique ID and timestamp. In the CTP version, this mode is always on; you cannot configure it. The XML file contains a list of `MirroringStatusEventArgs`. |
| `Online Monitoring`  | The Monitoring server sends events to subscribers online.                                                                                                                                                                                                                                                  |

## Configure monitoring

The Monitoring Server is based on the Windows Communication Foundation (WCF) Duplex Communication channel, and you can configure it in the config file. CMS integrates the Monitoring Server with the Mirroring Server 2.0, and the installation program configures it to use port 80 by default.

### Monitor server configuration

```xml
<service
  name="EPiServer.MirroringService.MirroringMonitoringService.MirroringMonitoringServer"
  behaviorConfiguration="DebugServiceBehaviour">
  <endpoint
    address="~/SitePath/MirroringMonitoringServer.svc"
    name=""
    binding="wsDualHttpBinding"
    bindingConfiguration="wsDualHttpBinding_MirroringMonitoringBinding"
    contract="EPiServer.MirroringService.MirroringMonitoring.IMirroringMonitoringEventSystem" />
</service>
```

### Monitor client configuration

```xml
<client>
  <endpoint
    name=""
    address="~/SitePath/MirroringMonitoringServer.svc"
    binding="wsDualHttpBinding"
    contract="EPiServer.MirroringService.MirroringMonitoring.IMirroringMonitoringEventSystem" />
</client>
```

## Use the monitoring utility

A custom subscriber can use the `MirroringMonitoringClient` helper class and receive events through the `MirroringTransferStatusEventHandler`. You also can subscribe to a specific mirroring job through the `Subscribe (GUID contextId)` method, or for mirroring jobs through the `Subscribe()` method.

### Helper class code example

To subscribe against the monitoring server, create an instance of `MirroringMonitoringClient` `endpointName` in `app.config`.

```javascript
MirroringMonitoringClient mom = new MirroringMonitoringClient(endPointName); //Client endPointName
```

To receive Mirroring events or to be notified from the Monitoring Server, the application has to add a handler to the `MirroringTransferStatusEventHandler` event.

```javascript
mom.MirroringTransferStatusEventHandler += new MirroringStatusEventHandler(TransferEventCatcher);
```

### Application example

Mirroring 2.0 ships with a simple example of the Monitoring WinForms application, which lets you view online and offline logs.

![](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/0SJGmJOsB0qJWkuM6hioJ-20260722-194635.jpg "mirroring-monitoring2.jpg")

![](https://api.archbee.com/api/optimize/BrbvVORKJ5iIeSMZye5kI/4Sh9mzqB7JB_jXjwPv5tg-20260722-194635.jpg "mirroring-monitoring3.jpg")
