Skip to content
/ Hot Public

Classes básicas para aplicações de serviços em cima do .NET

Notifications You must be signed in to change notification settings

mrebello/Hot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

98 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hot

Rotinas básicas para aplicações, baseada em .NET 6, para serviços, envolvendo:

##Config

Diversos pontos implementados para melhorar o Log padrão do .NET:

  • Usa System.Configuration.ConfigurationManager.
  • Implementa Log por email e em arquivo
  • appsettings.json fique embutido no executável.
  • pesquisa arquivos de configurações em uma sequência padrão de locais
  • classe estática global para uso na aplicação como um todo, independente da sequência de inicialização da injeção de dependência confusa original.

Uso normal:

string app_me = Config["AppName"];

##Log

Usa Microsoft.Extensions.Logging, adicionado:

  • emailLogger: envio de log por email (usando System.Net.Mail)
  • facilidades para criar categoria de log e recurso para Information e Debug usando lambda (para não degradar a performance da aplicação)

exemplos de uso:

  • padrão (instância estática Log é global, instanciada automaticamente pela biblioteca)

      Log.LogError($"Tentativa de atualização de IP não autorizado. IP: {IPOrigem}");
    
  • com categoria

      ILogger Log = LogCreate("Hot.HttpServer");
      ...
      Log.LogInformation("~HttpServer: Fechando listener");
    
  • com lambda

      Log.LogInformation(() => Log.Msg( funcao_demorada(c) ));
    

##SelfHostedService

Classe abstrata para ser usada para criação de serviços sefthosted.

Baseada no IHostedService, adicionando:

  • MainDefault para ser usada como função básica da classe, que implementa parâmetros padrões de linha de comando: help, helpconfig, install, uninstall, infos, version
  • install/uninstall - instala a aplicação como serviço do windows ou linux (systemd). Dados de nome e descrição do serviço são pegos dos metadados da aplicação.
  • autoupdate - recurso para publicação de nova versão do executável 'de produção' mesmo quando instalado como serviço automaticamente via nova versão do desenvolvimento, tratando também a aplicação em produção instalada como serviço do windows (apenas para aplicações httpserver)
  • Uso da configuração padrão da biblioteca

HttpServer

Classe abstrata para aplicação de um servidor http simples.

Baseada no HttpListener, adiciona:

  • método abstrato Process(HttpListenerContext context) para processar os pedidos, já sendo chamado de forma assíncrona pelo tratamento do listener
  • pré-processamento para devolver versão e fazer o autoupdate da aplicação

exemplo de uma aplicação de httpserver:

internal class Program : HttpServer {
    public static void Main(string[] args) {
        MainDefault<Program>();
    }

    public override void Process(HttpListenerContext context) {
        string url = RemoveIgnorePrefix(context?.Request.Url?.LocalPath);

        if (url == "/teste") {
            string infos = Config.Infos();
            context?.Response.Send(infos.ReplaceLineEndings("<br>"));
        }
    }
}

Para a criação de APIs Web, use a HotAPI.

##BD

Classe para acesso a direto a banco de dados (database first, sem uso de ORM, ao sqlserver, usando System.Data.SqlClient):

  • Conexão automática (com ou sem transação), com retry automático
  • Comandos SQL com parâmetros de forma simples
  • Log dos comandos (nível de log nas configurações)
  • String de conexão nas configurações

uso na aplicação: (não é necessário nenhuma declaração antes do uso)

BD.SQLCmd("UPDATE CRM_email_Enviado SET Data_leitura=getdate() WHERE Cod_CRM_email_Enviado=@1 AND Data_Leitura IS NULL", Cod_CRM_email_Enviado);

About

Classes básicas para aplicações de serviços em cima do .NET

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages