Fórum
Ver pergunta

Fechar conexões abertas usando motores de integração   

139 visualizações
2
0

Desenvolvi um serviço windows em C# que carrega dados entre o Primavera (v9) e um Portal Web e vise-versa. Este serviço faz a integração dos dados de 3 em 3 minutos até aqui tudo bem.
O desafio que surge é o seguinte eu uso o metodo Plataforma.AbrePlataformaEmpresa e MotorLP.AbreEmpresaTrabalho e depois que termino a integração uso os metodos Engine.FechaEmpresaTrabalho() e Platform.FechaPlataformaEmpresa() para fechar as conexões abertas, mas o que acontece é que não fecha todas as conexões abertas pelos motores (ficam sempre duas conexões a PRIEMPRE abertas, isso para cada vez que abro e fecho a empresa de trabalho), e após varias horas abrindo e fechando os motores ficam varias conexões abertas pelo serviço e acaba atingindo o numero de conexões maximas do SQL SERVER.
Qual método dos motores de integração devo usar para fechar todas as conexões abertas pelo meu serviço de integração?

Faça login para poder traduzir
V10
Marcado como spam
Criado há 5 anos e 7 meses cabralussene
c
cabralussene Iniciante
1 respostas
0
Resposta privada

Uma das causas para isso aconteçer está associada à interoperabilidade das tecnologias .NET e COM que tens devido à arquitectura do te sistema e que leva a que por vezes alguns objectos não sejam destruidos.

Experimenta este código:

public static void Termina()
{

	if (Engine != null)
	{
		Engine.FechaEmpresaTrabalho();
		FinalizeConnector(Engine);
	}


	if (Platform != null)
	{
		Platform.FechaPlataformaEx();
		FinalizeConnector(Platform);
	}

}


/// <summary>
/// Finalizes the connector.
/// </summary>
private static void FinalizeConnector(dynamic ObjCom)
{
	try
	{
		if (ObjCom != null)
		{
			while (Marshal.ReleaseComObject(ObjCom) > 0)
			{
				// release one by one
			};

			ObjCom = null;
		}
	}
	catch (Exception e)
	{
		throw new Exception(e.Message);
	}
}

 

Faça login para poder traduzir
Marcado como spam
Criado há 5 anos e 7 meses sergiosereno
sergiosereno Most Valuable Professional