By default, the Optimizely Content Management System (CMS) Image Service runs in the same application domain as the CMS site. For performance and scalability reasons, you can host the CMS Image Service in another process and use Windows Communication Foundation to access it. This could be an ASP.NET Web Application, a Console Application or even a WinForms Application.
## Host with IIS HTTP / WAS
If you host using IIS and the HTTP protocol, or with Windows Activation Services (Windows Server 2008 / Windows Vista only), then you should create a file with the SVC extension somewhere in the website. The SVC file should contain the following line of code:
You can configure the Windows Communication Foundation client and service from both code and configuration files. Configuration files are the most flexible because you can change endpoint addresses and binding types without having to touch the code.
### Image Service host application configuration
The following configuration example shows an Image Service hosting application that uses the NET.TCP protocol. Place the **\<system.serviceModel>** section in the application’s _app/web.config_ file as a child of the **<configuration>** section.
If you want to use the IIS non-HTTP hosting on Windows Server 2003 / Windows XP option, then add the following line to the configuration file as a child of the **\<system.web\>** and **\<httpModules\>** section:
### Configure the CMS website
To use the remote Image Service on an Optimizely CMS website, you also need to configure WCF in its _web.config_ file. Assuming that the Image Service was configured to use the NET.TCP protocol and is listening on port 8000/ImageService on serverxyz, the following configuration is required:
The client endpoints name MUST be `
ImageServiceClientEndPoint` because this is the name that CMS looks for when deciding if the Image Service should be accessed using Windows Communication Foundation. If there is no client endpoint with the name `
ImageServiceClientEndPoint`, then a local version of the Image Service is instantiated by CMS in the same application domain.
## Host with a Console / WinForms application
In the startup code for the application, create a `
System.ServiceModel.ServiceHost` instance passing in the `
Open the service host to start the listening operation:
The call to Open is non-blocking. Therefore, in a console application you should have code to stop the application exiting immediately:
Always close the service host before the application exits, either with an explicit call to `
Close()` or by employing the C# using statement:
## Host with IIS and a Non-HTTP Protocol on Windows Server 2003 / XP
Microsoft does not support hosting a WCF service in IIS on Windows Server 2003 / Windows XP using a non-HTTP protocol (for example, NET.TCP, NET.PIPE), but you can do it and it works using the help of an HTTP module.
EPiServer.ImageLibrary` assembly actually supplies such a module to support this hosting option. No user code is required for this, only configuration.
The main disadvantage with this hosting method is that the requests to the WCF service do not go through the IIS HTTP pipeline and therefore have no effect on the lifetime of the web application. This means that you must activate the web application hosting the service via a normal web request to call the HTTP module and open the service host.
## Related topics
[WCF Hosting Options](🔗) (MSDN.com)
[How to host a WCF Service in IIS](🔗) (MSDN.com)
[How to Host a WCF Service with Windows Activation Services on Windows Server 2008 / Windows Vista (WAS)](🔗) (MSDN.com)
[Configure CMS](🔗) describes the syntax used in the description of the configuration elements.