HomeDev GuideRecipesAPI Reference
Dev GuideAPI ReferenceUser GuideLegal TermsGitHubNuGetDev CommunityOptimizely AcademySubmit a ticketLog In
Dev Guide

WebSocket support

Describes using a WebSocket connection to improve the user interface experience.

A WebSocket connection notifies the user interface about available updates so that users see changes without an explicit page refresh. Use WebSockets in the Projects and Notifications areas.

🚧

Known limitation

If the app runs on Windows with IIS then the WebSocket support must be installed and enabled on the web server. Without WebSocket support, you must manually refresh the user interface for notifications, or updated comments and project items to show.

A WebSocket connection is a full-duplex communication channel over TCP from the browser client to the web server and was standardized by IETF as RFC6445 in 2011. It is available in modern browsers but may still pose a problem with firewalls and reverse proxies not yet implementing the standard.

Enable WebSocket support

Install WebSockets on a Windows machine by following these instructions.

After that, make sure that the HttpRuntime is targeting version 4.5; if not, the server cannot initiate the WebSocket connection. You do this by putting the following setting in the web.config file:

<system.web>
  <httpRuntime targetFramework="4.5" />
</system.web>

<httpRuntime targetFramework="4.5" /> is a shortcut that lets the ASP.NET runtime infer various configuration settings. These settings let the server side accept and serve WebSocket connections.

Troubleshoot and disable WebSocket support

Initiate a WebSocket connection as an HTTP GET request with a Connection:Upgrade header, whereby the server responds with a similar upgrade reply. If a non-supporting proxy server or firewall receives this request, it most likely drops the headers and returns the `200 OK response from the server, causing the client to close the connection. If this is the case, try bypassing the middle tier and connecting to the web server directly to ensure you properly configured it. When you are sure the web server is not the problem, look into the proxy server configuration and see whether it supports web sockets.

As a last resort, you can disable the WebSocket support on the web server by adding the following configuration to the <appSettings> section in web.config. By doing this, the CMS edit user interface does not establish a WebSocket connection to the server, and the end-user has a degraded experience.

<appSettings>
  <add key="Epi.WebSockets.Enabled" value="false" />
</appSettings>

🚧

Known limitation

WebSockets are currently used in the project overview and notification areas. Developers cannot use the module (Realtime.js) that enables this since it is internal.