Image Service
Describes the options for hosting the Image Service outside the Optimizely Content Management System (CMS) application.
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, such as an ASP.NET Web Application, a Console Application, or 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 or Windows Vista only), you should create a file with the SVC extension somewhere on the website. The SVC file should contain the following line of code:
<%@ ServiceHost Language="C#" Debug="true" Service="EPiServer.ImageLibrary.ImageService" %>
You can configure the Windows Communication Foundation client and service from code and configuration files. Configuration files are the most flexible because you can change endpoint addresses and binding types without touching 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.
<system.serviceModel>
<services>
<service name="EPiServer.ImageLibrary.ImageService">
<endpoint address="net.tcp://serverxyz:8000/ImageService"
binding="netTcpBinding"
bindingConfiguration="ImageServiceBinding"
contract="EPiServer.ImageLibrary.IImageService" />
</service>
</services>
<bindings>
<netTcpBinding>
<binding name="ImageServiceBinding"
maxReceivedMessageSize="20000000">
<readerQuotas maxArrayLength="20000000" />
</binding>
</netTcpBinding >
</bindings>
If you want to use the IIS non-HTTP hosting on Windows Server 2003 or Windows XP option, then add the following line to the configuration file as a child of the <system.web>
and <httpModules>
section:
<add name="ImageServiceModule"
type="EPiServer.ImageLibrary.ImageServiceModule, EPiServer.ImageLibrary" />
Configure the CMS website
To use the remote Image Service on an Optimizely CMS website, you must also configure WCF in its web.config
file. Assuming you configured the Image Service to use the NET.TCP protocol and is listening on port 8000 or ImageService on serverxyz, the following configuration is required:
<system.serviceModel>
<client>
<endpoint name="ImageServiceClientEndPoint"
address="net.tcp://serverxyz:8000/ImageService"
binding="netTcpBinding"
bindingConfiguration="ImageServiceBinding"
contract="EPiServer.ImageLibrary.IImageService" />
</client>
<bindings>
<netTcpBinding >
<binding name="ImageServiceBinding" maxReceivedMessageSize="20000000">
<readerQuotas maxArrayLength="20000000" />
<security mode="None">
</security>
</binding>
</netTcpBinding >
</bindings>
Note
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 nameImageServiceClientEndPoint
, then a local version of the Image Service is instantiated by CMS in the same application domain.
Host with a Console or WinForms application
In the startup code for the application, create a System.ServiceModel.ServiceHost
instance passing in the ImageService
type:
//Create a service of for the type EPiServer.ImageLibrary.ImageService
ServiceHost serviceHost = new ServiceHost(typeof(ImageService));
Open the service host to start the listening operation:
//Start the service
serviceHost.Open();
Note
The call to
Open
is non-blocking. Therefore, in a console application you should have code to stop the application exiting immediately:
Console.WriteLine("Press any key to stop the service");
Console.ReadLine();
Always close the service host before the application exits with an explicit call to Close()
or by employing the C# using the statement:
//Close the service
serviceHost.Close();
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 or 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.
The EPiServer.ImageLibrary
assembly supplies such a module to support this hosting option. You do not need code for this; only configuration.
The main disadvantage of this hosting method is that the requests to the WCF service do not go through the IIS HTTP pipeline and have no effect on the web application's lifetime. You must activate the web application hosting the service through 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 of the configuration elements.
Updated 8 months ago