Atraso na resposta do SIP Dispatcher na consulta à Portabilidade

Ambiente do Cliente onde foi detectado o problema:
Servidor do TollManager: Estação de trabalho HP, Core i3, 4GB de RAM
Sistema Operacional: Windows 7 Professional, 64 bits
Servidor de Banco de Dados: SQL Server 2008 R2 Express Edition, 64 bits (RTM)
Versão do TollManager: 8.5.0
Hotfix do DSD (SIP Dispatcher): 1.02.0023
Pabx: Alcatel OXE
 
Problema Encontrado: Algumas chamadas encaminhadas ao SIP Dispatcher para consulta da Portabilidade não são transferidas corretamente ou não são identificadas/reencaminhadas pelo Pabx. Normalmente ocorre com as primeiras chamadas transferidas assim que o SIP Dispatcher é iniciado ou após um intervalo de tempo em que não ocorrem ligações. Quando as ligações ocorrem em sequência as ligações são encaminhadas normalmente.
 
Análise detalhada: Após analisarmos o tráfego com o Wireshark, notamos que as mensagens de INVITE oriundas do Pabx em algumas situações demoravam em torno de 5 a 6 segundos para serem respondidas pelo SIP Dispatcher. Devido ao tempo de resposta ser muito longo, o Pabx considerava a chamada não respondida e a encerrava mesmo depois que o SIP Dispatcher a respondia. No Wireshark verificamos uma sequência de 4 a 5 mensagens INVITE e após 5 a 6 segundos as mensagens de retorno do SIP Dispatcher "Trying" e "302 Moved Temporarily".
 
Verificação do ocorrido no SIP Dispatcher: Identificamos que neste cenário o SIP Dispatcher estava demorando entre 5 e 6 segundos para efetuar a conexão ao SQL Server, porém a consulta a tabela de portabilidade ocorria normalmente em milissegundos. Identificamos também que esse fato não ocorre com outras versões do Windows com SQL Server.
 
O CallManager e TollManager utiliza uma “string de conexão” padrão para todas as versões do SQL Server:
Com Autenticação do Windows: driver={SQL Server};server=NomedoServidor;trusted_connection=yes;database=NomedaBasedeDados
Com Autenticação do SQL: driver={SQL Server};server=NomedoServidor;trusted_connection=no;uid=NomedoUsuário;pwd=Senha;database=NomedaBasedeDados
Esta “string de conexão” tem um tempo de resposta de conexão maior que o normal neste cenário e não é adequada para o funcionamento correto do SIP Dispatcher. Na utilização das demais funções do TollManager este “atraso” não afeta a utilização do sistema.
Com essa "string de conexão", o sistema utiliza a dll "sqlsrv32.dll" que é mais adequada para as versões do SQL Server 2000 e anteriores, porém ainda é compatível com as versões posteriores.
 
Resolução: Foi substituída a “string de conexão” para a nativa da versão do SQL Server 2008 R2 que efetua a conexão bem mais rápida e resolve o problema:
Com Autenticação do Windows: Provider=SQLNCLI10;DataTypeCompatibility=80;Server=NomeServidor;Trusted_Connection=yes;Database=NomeBaseDados
Com Autenticação do SQL: Provider=SQLNCLI10;DataTypeCompatibility=80;Server=NomeServidor;uid=NomedoUsuário;pwd=Senha;Database=NomeBaseDados
Com essa "string de conexão", o sistema utiliza a dll "sqlncli10.dll" que é mais adequada para as versões do SQL Server 2005 até a versão 2008 R2.
 
Nota:
    1. Para as versões 2012, 2012 R2 ou 2014 do SQL Server utlizar:
    Com Autenticação do Windows: Provider=SQLNCLI11;DataTypeCompatibility=80;Server=NomeServidor;Trusted_Connection=yes;Database=NomeBaseDados
    Com Autenticação do SQL: Provider=SQLNCLI11;DataTypeCompatibility=80;Server=NomeServidor;uid=NomedoUsuário;pwd=Senha;Database=NomeBaseDados
Com essa "string de conexão", o sistema utiliza a dll "sqlncli11.dll" que é mais adequada para as versões do SQL Server 2012, 2012 R2 e 2014.
    2. Sempre utilizar o parâmetro Database como o último parâmetro para evitar um "bug" que existe em algumas versões do TollManager e CallManager;
 
Observações:
    1. O CallManager e TollManager utilizam na "string de conexão" padrão o Provider ODBC. Os novos providers ODBC nativos do SQL Server apresentam algumas incompatibilidades com os tipos de dados varchar(max) e nvarchar(max) utilizados em algumas tabelas do sistema. Para evitar esse problema, na solução utilizamos o Provider OLE DB que possui compatibilidade com esses tipos de dados e evita problemas em outras aplicações do sistema.
 
 
 

Add Feedback