Como comenté anteriormente la propiedad InstanceContextMode determina el ciclo de vida de las instancias del servicio. Esta propiedad se establece de forma global una sola vez para toda la clase.
Pero ¿ qué pasa si queremos cambiar esto?¿ Podemos hacer que una determinada operación haga que el servicio se comporte de manera diferente? La respuesta es sí.
En el OperationBehavior del método podemos establecer la propiedad ReleaseInstanceMode, que viene a completar la funcionalidad ofrecida por InstanceContextMode.
[OperationBehavior ( ReleaseInstanceMode = <valor> ) ]
public bool Operation()
{
Los valores que puede adoptar este atributo son:
ReleaseInstanceMode.AfterCall. Cuando finaliza la operación la instancia del servicio libera la instancia. Si el cliente invoca otra operación se creará otra instancia.
ReleaseInstanceMode.BeforeCall. Si existe ya una instancia cuando el cliente lo llama, éste se destruirá y se creará una nueva.
ReleaseInstanceMode.BeforeAndAfterCall. Como es de suponer es una combinación de las dos anteriores.
ReleaseInstanceMode.None. Es el valor por defecto. Se hace caso al valor de InstanceContextMode.
Conocer esta propiedad, las propiedades InstanceContextMode y Concurrency y los parámetros de Throtting es algo básico para poder diseñar tu servicio WCF.