public void Processar(dynamic mensagem)
        {
            int primeiro = mensagem.Primeiro;
            if (primeiro < 1)
            {
                throw new ArgumentException("O número do primeiro contrato deve ser no mínimo 1.", "mensagem");
            }

            int ultimo = mensagem.Ultimo;
            if (ultimo < primeiro)
            {
                throw new ArgumentException("O número do último contrato deve ser maior ou igual ao primeiro.",
                                            "mensagem");
            }
            if (ultimo > Contrato.NumeroMaximoDeContrato)
            {
                throw new ArgumentException(
                    String.Format("O número do último contrato deve ser menor do que {0}.",
                                  Contrato.NumeroMaximoDeContrato),
                    "mensagem");
            }

            Guid processamentoId = mensagem.ProcessamentoId;
            if (processamentoId == Guid.Empty)
            {
                throw new ArgumentException("O identificador do processamento não foi encontrado.", "mensagem");
            }

            int quantidade = ultimo - primeiro + 1;
            if (quantidade > _quantidadeMaximaPorLote)
            {
                Trace.WriteLine(
                    String.Format("Subdividindo solicitação de geração dos contratos {0} a {1}.", primeiro, ultimo));
                int meio = (ultimo - primeiro)/2 + primeiro;
                var gerador = new GeradorDeContratos();
                gerador.SolicitarGeracao(processamentoId, primeiro, meio);
                gerador.SolicitarGeracao(processamentoId, meio + 1, ultimo);
            }
            else
            {
                SolicitarGeracaoDeLote(processamentoId, primeiro, ultimo);
            }
        }
 public ActionResult GerarContratos(GeracaoDeContratosModel model)
 {
     try
     {
         var gerador = new GeradorDeContratos();
         gerador.SolicitarGeracao(model.QuantidadeContratos);
         return RedirectToAction("GeracaoSolicitada");
     }
     catch (Exception ex)
     {
         ModelState.AddModelError("", ex.Message);
         return View();
     }
 }