Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

  • Membros Pro
Postado

Boa noite,

estou com um grande problema.

Tenho um worker que fica capturando notas, manifestando, e ele roda em um container docker. Esse monitor comunica com uma API minha, por exemplo para realizar a manifestação da nota.

Veja esse trecho do código:
 

private ACBrNFe ACBrNFe;

private async Task<bool> ManifestarNota(NotasFiscaisManifestacaoModel nota, en_tipomanifestacao tipomanifestacao)
{

    Console.WriteLine("Método ManifestarNota - Segundo processo");

    bool result = false;
    var empresa = await _repositorio.empresa.SelecionarAsync(nota.idempresaevocenter);

    Console.WriteLine($"Método ManifestarNota - Empresa: {empresa.razaosocial}");

    CertificadoPorParametrosModel certificadodigitalkeevo = await _kcenterworkscertificadoservico.SelecionarPorParametros(nota.idempresaevocenter,
                                                                                                                          nota.idmaster,
                                                                                                                          AplicativoModel.en_aplicativo.Manifestacao.ToInt());

    if (certificadodigitalkeevo == null)
        return false;

    Console.WriteLine($"Método ManifestarNota - Leu certificado: {certificadodigitalkeevo.datavalidade}");

    //string caminhoCompleto = Path.Combine(Path.GetTempPath(), certificadodigitalkeevo.idcertificado.ToString() + ".pfx");

    try
    {
        Console.WriteLine("Método ManifestarNota - Início config acbr");
        ACBrNFe = new();
        Console.WriteLine("Método ManifestarNota - Instanciou acbr");
        ConfigurarCertificado(ACBrNFe, certificadodigitalkeevo);
        Console.WriteLine("Método ManifestarNota - Configurou certificado acbr");
    }
    catch
    {
        return false;
    }

O problema é o seguinte:

Fui colocando log no monitor e para printar na AWS, e ocorre o seguinte erro quando passo nessa parte:

ACBrNFe = new();

O erro é:

03 de setembro de 2024 às 16:36 (UTC-3:00)
start.sh: line 7: 8 Segmentation fault (core dumped) dotnet Api.Dfe.dll
bcdc131931024db48b613901b8f7788a
dfe-api-prod
03 de setembro de 2024 às 16:36 (UTC-3:00)
(dotnet:8): GLib-GObject-WARNING **: 19:36:05.505: cannot register existing type 'GdkWindow'
bcdc131931024db48b613901b8f7788a
dfe-api-prod
03 de setembro de 2024 às 16:36 (UTC-3:00)
(dotnet:8): GLib-GObject-CRITICAL **: 19:36:05.505: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
bcdc131931024db48b613901b8f7788a
dfe-api-prod
03 de setembro de 2024 às 16:36 (UTC-3:00)
(dotnet:8): GLib-GObject-WARNING **: 19:36:05.505: cannot register existing type 'GdkWindowImpl'
bcdc131931024db48b613901b8f7788a
dfe-api-prod
03 de setembro de 2024 às 16:36 (UTC-3:00)
(dotnet:8): GLib-GObject-CRITICAL **: 19:36:05.505: g_type_interface_add_prerequisite: assertion 'G_TYPE_IS_INTERFACE (interface_type)' failed
bcdc131931024db48b613901b8f7788a
dfe-api-prod
03 de setembro de 2024 às 16:36 (UTC-3:00)
(dotnet:8): GLib-GObject-CRITICAL **: 19:36:05.505: g_type_add_interface_static: assertion 'g_type_parent (interface_type) == G_TYPE_INTERFACE' failed

Por favor, conseguem me ajudar ?
 

 

  • Consultores
Postado

Estava funcionando e parou ou você está configurando agora?

O cenário do servidor é Windows ou Linux?

Se for Windows, copie as dlls da OpenSSL versão 1.1.1 na pasta da aplicação, se for Linux instale essa versão e veja se funciona. 

Confirme se está pegando a versão correta da Lib, MT o ST de acordo com o que sua API está consumindo. 

Confirme também se está pegando a Lib da arquitetura correta, se o servidor for x64 ou x86, a biblioteca deve ser da mesma arquitetura. 

Teste com a versão atual da lib, caso esteja testando com uma versão anterior.

  • Membros Pro
Postado

Bom dia Renato,

Esse caso sempre ocorreu, como fizemos os logs, vimos que é justamente quando instancia a dll e a api cai.

Toda infraestrutura é no linux, Ubuntu 22.04.4

  • Consultores
Postado
1 hora atrás, TimeB256 disse:

Bom dia Renato,

Esse caso sempre ocorreu, como fizemos os logs, vimos que é justamente quando instancia a dll e a api cai.

Toda infraestrutura é no linux, Ubuntu 22.04.4

Verifique: 

  • Certifique-se de que o código não tenta ler ou escrever em locais de memória que não estão alocados ou estão fora dos limites.
  • O seu programa é multi-threaded, verifique se há condições de corrida ou falta de sincronização adequada, que podem levar a falhas de segmentação.
  • Verifique as permissões de leitura e escrita para as pastas.
  • Certifique-se de que os ponteiros estão devidamente inicializados e que não são desreferenciados quando estão nulos (NULL).
     

Veja esse tópico para o erro GLib: 

 

  • Membros Pro
Postado

Então, vou realizar o seguinte teste..

O que entendemos é que a acbr quando instanciada, carrega umas bibliotecas gráficas (xvfb e GdkWindow).

Hoje, tenho um arquivo na api e no monitor (start.sh), onde tenho seguinte conteúdo:

#!/bin/bash
if [ -f /tmp/.X99-lock ]; then
    rm /tmp/.X99-lock
fi

Xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render -noreset &
dotnet Api.Dfe.dll

 

No dockerfile, faço a seguinte config.

ENV DISPLAY :99
RUN chmod 0755 /app/start.sh
ENTRYPOINT ["bash", "start.sh"]

 

Vou comentar esse cara, e adicionar o seguinte comando;

ENTRYPOINT ["xvfb-run", "dotnet", "ACBr.API.dll"]

Vi isso no seguinte link:

https://github.com/frones/ACBr/blob/5013dcaa92124d4516a471628d92042a8354c3f3/Projetos/ACBrLib/Demos/C%23/ACBr.API/ACBr.API/Dockerfile#L6

Não sei se irá resolver, mas vamos testar aqui.

Tinha que ter uma forma de configurar pra acbr nao carregar essas bibliotecas gráficas.

 

 

 

  • Consultores
Postado
16 horas atrás, Renato Rubinho disse:

Se for Windows, copie as dlls da OpenSSL versão 1.1.1 na pasta da aplicação, se for Linux instale essa versão e veja se funciona. 

Confirme se está pegando a versão correta da Lib, MT o ST de acordo com o que sua API está consumindo. 

Confirme também se está pegando a Lib da arquitetura correta, se o servidor for x64 ou x86, a biblioteca deve ser da mesma arquitetura. 

Teste com a versão atual d

Você verificou as sugestões que passei?

* dlls da OpenSSL versão 1.1.1 na pasta da aplicação

* Versão correta da Lib, MT o ST de acordo com o que sua API está consumindo. 

* Arquitetura correta

* Versão atual da lib

  • Curtir 1
  • Membros Pro
Postado

O meu arquivo dockerfile está configurado da seguinte forma:

Está faltando alguma instalação? Vi que no post do Julio Cavalcanti, temos instalação de itens a mais.

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
 
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
 
RUN apt update && apt-get install -y libxml2 libxslt-dev libgtk2.0-0 xvfb
 
WORKDIR /app
EXPOSE 80
EXPOSE 443
 
FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
 
WORKDIR /src
COPY src/WebApis/Api.Dfe/*.csproj ./
COPY src/nuget.config ./
 
RUN dotnet restore "Api.Dfe.csproj" /p:Configuration="Release" --configfile "./nuget.config"
 
COPY src/WebApis/Api.Dfe/ ./
WORKDIR "/src"
 
RUN dotnet build "Api.Dfe.csproj" -c Release -o /app
 
FROM build AS publish
 
RUN dotnet publish "Api.Dfe.csproj" -c Release -o /app
 
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
 
#https://stackoverflow.com/questions/60934639/install-fonts-in-linux-container-for-asp-net-core
# RUN echo "deb http://deb.debian.org/debian/ bookworm main contrib" > /etc/apt/sources.list && \
#     echo "deb-src http://deb.debian.org/debian/ bookworm main contrib" >> /etc/apt/sources.list && \
#     echo "deb http://security.debian.org/ bookworm-security main contrib" >> /etc/apt/sources.list && \
#     echo "deb-src http://security.debian.org/ bookworm-security main contrib" >> /etc/apt/sources.list
RUN sed -i'.bak' 's/$/ contrib/' /etc/apt/sources.list
RUN apt-get update; apt-get install -y ttf-mscorefonts-installer fontconfig
 
# ENV DISPLAY :99
# RUN chmod 0755 /app/start.sh
# ENTRYPOINT ["bash", "start.sh"]
 
# ENTRYPOINT ["xvfb-run", "dotnet", "Api.Dfe.dll"]
 
ENTRYPOINT ["/bin/sh", "-c", "/usr/bin/xvfb-run -a $@", ""]
CMD ["dotnet", "Api.Dfe.dll"]
  • Consultores
Postado

Boa tarde!

Neste tópico um colega compartilha um exemplo de docker no qual diz ter conseguido utilizar:

Em anexo envio também o dockerfile que originalmente constava neste tópico:

(me parece que o download está indisponível nele)

Dockerfile

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Consegui capturar o mesmo erro, mas ele agora deu uma mensagem que não havia percebido:

Notem o último erro.

AcbrCTeServico - antes de instanciar acbrcte

(dotnet:28): GLib-GObject-WARNING **: 16:38:30.221: cannot register existing type 'GdkDisplayManager'

(dotnet:28): GLib-CRITICAL **: 16:38:30.221: g_once_init_leave: assertion 'result != 0' failed

(dotnet:28): GLib-GObject-CRITICAL **: 16:38:30.221: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed

(dotnet:28): GLib-GObject-WARNING **: 16:38:30.221: invalid (NULL) pointer instance

(dotnet:28): GLib-GObject-CRITICAL **: 16:38:30.221: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(dotnet:28): GLib-GObject-WARNING **: 16:38:30.221: invalid (NULL) pointer instance

(dotnet:28): GLib-GObject-CRITICAL **: 16:38:30.222: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(dotnet:28): GLib-GObject-WARNING **: 16:38:30.222: cannot register existing type 'GdkDisplay'

(dotnet:28): GLib-CRITICAL **: 16:38:30.222: g_once_init_leave: assertion 'result != 0' failed

(dotnet:28): GLib-GObject-CRITICAL **: 16:38:30.222: g_type_register_static: assertion 'parent_type > 0' failed

(dotnet:28): GLib-CRITICAL **: 16:38:30.223: g_once_init_leave: assertion 'result != 0' failed

(dotnet:28): GLib-GObject-CRITICAL **: 16:38:30.223: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
Segmentation fault (core dumped)
xvfb-run: error: problem while cleaning up temporary directory

 

 

  • 2 semanas depois ...
  • Administradores
Postado

Tópico fechado por falta de retorno do usuário

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.