Quando você estiver trabalhando com WCF e em seus dados de contrato (Classes DataContract) precisar retornar uma lista de objetos e usar o IList<T>, você pode se deparar com a seguite exception: ExecutionEngineException.
Esse erro é causado pois existe um bug no .NET Framework para tratar IList<T> entre as camadas e por algum motivo o WCF interpreta o IList<T> que normalmente usamos o List<T> como classe principal para definir as informações como array de T[]. Isso pode lhe causar problemas de serialização, vide a exception ou simplesmente causar um problema de você retornar uma lista de objetos, tentar modificá-la adicionando mais um item e simplesmente o WCF retornar um erro dizendo que o Array é de tamanho fixo: Collection was of a fixed size.
Para solucionar esse problema, encontrei em um blog de um desenvolvedor a seguinte correção:
[OnDeserialized]
internal void DeserializedMethod(StreamingContext context)
{
if (this.SuaLista != null) this.SuaLista = this.SuaLista.ToList();
}
Basta colocar esse método com esse atributo nas suas classes e pronto.
Esse atributo OnDeserializedAttribute faz com que o método implementado (exatamente com essa assinatura) seja acionado assim que a serialização for concluída.
Espero que possa ajudar.. pois perdi 2 dias para corrigir esse problema no projeto que estou participando. :-s