WCF Channel e ChannelFactory Caching

Então eu decidi melhorar um pouco o desempenho no meu aplicativo WCF e tentar armazenar em cache os Canais e o ChannelFactory. Há duas perguntas que tenho sobre tudo isso que preciso esclarecer antes de começar.

1) O ChannelFactory deve ser implementado como um singleton?

2) Não tenho certeza sobre como armazenar em cache / reutilizar canais individuais. Você tem algum exemplo de como fazer isso que pode ser compartilhado?

rovavelmente, é importante observar que meu serviço WCF está sendo implantado como um aplicativo independente, com apenas um ponto de extremidad

EDITAR

Obrigado pelas respostas. Ainda tenho algumas perguntas ...

1) Acho que estou confuso quanto ao local onde o cache deve ocorrer. Estou entregando uma API do cliente que usa esse código para outro departamento de nossa empresa. Esse cache ocorre no cliente?

2) A API do cliente será usada como parte de um aplicativo Silverlight. Isso muda alguma coisa? Em particular, quais mecanismos de armazenamento em cache estão disponíveis nesse cenário?

3) Ainda não estou claro sobre o design do método GetChannelFactory. Se eu tiver apenas um serviço, apenas um ChannelFactory deve ser criado e armazenado em cache?

Ainda não implementei nenhum recurso de armazenamento em cache (porque estou totalmente confuso sobre como isso deve ser feito!), Mas aqui está o que tenho até agora para o proxy do cliente:

namespace MyCompany.MyProject.Proxies
{
    static readonly ChannelFactory<IMyService> channelFactory =
        new ChannelFactory<IMyService>("IMyService");

    public Response DoSomething(Request request)
    {
        var channel = channelFactory.CreateChannel();

        try
        {
            Response response = channel.DoSomethingWithService(request);
            ((ICommunicationObject)channel).Close();
            return response;
        }
        catch(Exception exception)
        {
            ((ICommenicationObject)channel).Abort();
        }
    }
}

questionAnswers(3)

yourAnswerToTheQuestion