EPiServer CMS 6.0
Document last saved:
This technical note contains functional and technical information for the EPiServer Events System in EPiServer CMS.
The system provides a mechanism for distributing events within an EPiServer CMS site, between EPiServer CMS sites on the same physical server (enterprise), and between EPiServer CMS sites on separate servers (load-balanced standard and enterprise).
The system is based on Microsoft Windows Communication Foundation (“Indigo”) technology as this provides for object-oriented interface definitions and configurable interprocess communication methods, without the need to change code.
The EPiServer.Events.Clients.Event class is the public API of the EPiServer CMS Events System. It allows for the sending and receiving of site events in a de-coupled manner. The Events System does not have any predefined events when EPiServer CMS starts. It is up to the code that wants to send and receive events to register them using the Event.GetEvent static method. The GetEvent method accepts a GUID event Id and will create a new Event object instance if one hasn't already been created for the event Id, otherwise it will return the existing one. It is important to note that the GUID event Id is only important to users of the Events System in that it allows different pieces of code to identify the same event. The Events System has no knowledge of what these events are or who uses them.
The Event class has two .NET events that user code can subscribe to; the Raised event and the Missed event. The Raised event is fired when some code has called the Raise method of the Event class. The Missed event is fired when the Event System detects that a remote event (an event received from another site or server) has gone missing. The algorithm for detecting a missing event is based upon tracking the sequence numbers allocated to remote events and detecting after a predetermind amount of time that one or more are missing.
The following text describes the logical setup and execution of the events systems.
The EPiServer Events System is used to distribute events with an EPiServer CMS site and between sites in an enterprise and/or load balanced scenario. See the Configuring EPiServer CMS Enterprise technical note for information about installing and configuring load balanced and enterprise sites. The EPiServer Events System configuration consists of two parts: Subscriber and publisher. An EPiserver Server can be both subscriber and publisher.
The Subscriber works as a WCF Server and it should be configuerd as WCF Service.
To configure the EPiServer Event System Subscriber make the following checks/adjustment to the EPiServer CMS web.config file.
Note the configuration examples below are for IIS6 for IIS7 examples, see the tech note Changes between IIS6 and IIS7.
<service name="EPiServer.Events.Remote.EventReplication" behaviorConfiguration="*">
<endpoint name="RemoteEventServiceEndPoint" contract="EPiServer.Events.ServiceModel.IEventReplication"
binding="*"RemoteEventsBinding" address="*" />
In the <siteSettings> section ensure the following values are set as shown:
<configuration>If enableEvents is set to true but enableRemoteEvents is set to false then any events raised will only be distributed to subscribers within the same site. For load balanced or enterprise sites then enableRemoteEvents must also be set to true so that the events can be distributed to other sites both on the same server and other servers.
<siteSettings enableEvents="true" enableRemoteEvents="true">
<endpoint name="*" address="*" binding="*" bindingConfiguration="*" contract="EPiServer.Events.ServiceModel.IEventReplication" />
In the default web.config you will see an example of UDP configuration of the EPiServer Event System configuration.
Examples of EPiServer CMS functionality that use the Events System are:
To test page cache events, edit a page on one EPiServer CMS site and ensure the change is reflected (with 2/3 seconds) on the 2nd load balanced EPiServer CMS site. See below for exact details:
To test permanent link map store events, create or edit a link on a page on one EPiServer CMS site and ensure the change is reflected (with 2/3 seconds) on the 2nd load balanced EPiServer CMS site. See below for exact details:
EPiServerRemoteEventsListener is a diagnostics application for the EPiServer CMS Events System.
EPiServer CMS uses Windows Communication Foundation technology to send events between load balanced sites. By default the RemoteEventsListener application listens on the same UDP channel as EPiServer CMS in order to display the events that are being transmitted by EPiServer CMS both on the local server and by other servers on the same network. This can be useful to determine if firewalls or other software is blocking the EPiServer CMS events. You have to change the EPiServerRemoteEventListener.config file in the case you have configuerd the publisher and subscriber on different binding or address. (See the Microsoft WCF configuration documentation).
The application can also be used to send events. It can be useful to run an instance in send mode on one server and one in receive (normal) mode on another server to test if the necessary ports EPiServer Events use are open. To launch in send mode, start the application with a command line parameter of 'send'.
The application requires .NET 2.0 and can be installed using a simple XCopy of the contents of the zip file.
If the Events System doesn't appear to be working properly, check the following items:
See the FAQ which contains an example of how to configure to one specific server using the tcp protocol.
See the FAQ which contains information regarding the error operation on a socket.