Partilhar via


Informações internas sobre o estado do RPC

Esta seção fornece detalhes da estrutura interna das informações de estado coletadas pelo runtime do RPC.

Todas as informações de estado de tempo de execução do RPC estão contidas nas células. Uma célula é a menor unidade de informações que pode ser exibida e atualizada individualmente.

Cada objeto de chave no RPC Run-Time manterá uma ou mais células de informações sobre seu estado. Cada célula tem uma ID de célula. Quando um objeto se refere a outro objeto, ele faz isso especificando a ID da célula desse objeto. Os principais objetos dos quais o Runtime do RPC pode manter informações são pontos de extremidade, threads, objetos de conexão, objetos SCALL (Chamada de Servidor) e objetos CCALL (Chamada de Cliente).

Quando um servidor RPC está executando, o Runtime do RPC detecta um conjunto de endpoints usando um ou mais threads de trabalho. Sempre que os dados são transmitidos para o servidor, um thread pega os dados e determina qual é a solicitação de entrada. Se a solicitação for criar uma conexão, um objeto Connection será criado e esse objeto atenderá a todas as chamadas na conexão. Quando uma chamada RPC é feita na Conexão, o objeto Conexão instancia um objeto de Chamada de Servidor (SCALL) correspondente ao objeto de Chamada de Cliente (CCALL). Esse objeto de Chamada de Servidor manipula essa chamada específica.

Quando um cliente RPC está executando, o RPC Run-Time cria um objeto de Chamada de Cliente sempre que uma chamada é feita. Este objeto de Chamada de Cliente contém informações sobre essa chamada específica.

Células de ponto de extremidade

Do ponto de vista do Runtime do RPC, um ponto de extremidade é um ponto de entrada por meio do qual o servidor em específico pode ser contatado. O ponto de extremidade está sempre associado a um determinado transporte de RPC. As informações de estado do ponto de extremidade são usadas para associar uma chamada de cliente a um processo específico no servidor.

Os campos em uma célula de ponto de extremidade são:

ProtseqType
A sequência de protocolo para esse ponto de extremidade.

Status
O valor de status: alocado, ativo, ou inativo. A maioria dos pontos de extremidade está ativa. Um ponto de extremidade tem status alocado quando o processo de criação foi iniciado, mas ainda não foi concluído. Um endpoint é inativo se não estiver mais em uso (por exemplo, quando um protocolo tiver sido desinstalado).

EndpointName
Os primeiros 28 caracteres do nome do ponto de extremidade.

Células de Thread

Os threads do servidor são threads de trabalho (threads Win32 padrão para uso pelo RPC).

Os campos em uma célula de thread são:

Status
O valor de status: em processamento, expedido, alocado ou ocioso. Um thread Em processamento é aquele que está dentro do Runtime e está processAndo informações. Um thread expedido já foi expedido (chamado) para a rotina do gerenciador fornecida pelo servidor (geralmente chamado apenas de rotina do servidor). Um thread alocado foi armazenado em cache. Um thread ocioso está disponível para solicitações.

LastUpdateTime
A hora (em milissegundos após a inicialização) em que as informações foram atualizadas pela última vez.

TID
Uma ID de thread desse thread. Isso é útil ao tentar correlacionar com a lista de threads no depurador.

Células do Objeto de Conexão

Os campos em uma célula de objeto de conexão são:

Sinalizadores
Os valores de sinalizador incluem exclusivo/não exclusivo, nível de autenticação e serviço de autenticação.

LastTransmitFragmentSize
O tamanho do último fragmento transmitido pela conexão.

Ponto de extremidade
O ID da célula do ponto de extremidade do qual essa conexão foi obtida.

LastSendTime
A última vez que os dados foram enviados em uma conexão.

LastReceiveTime
A última vez que os dados foram recebidos em uma conexão.

Células de objeto de chamada de servidor

Os campos em uma célula do objeto SCALL (Chamada de Servidor) são:

Status
O valor de status: alocado, ativo ou expedido. Uma chamada alocada é inativa e armazenada em cache. Quando uma chamada está ativa, a RPC Run-Time está processando informações relacionadas a essa chamada. Quando uma chamada é expedida, a rotina do gerente (rotina do servidor) foi chamada e ainda não retornou.

ProcNum
O número do procedimento (número da operação, em arquivos de captura do NetMon) dessa chamada. O RPC Run-Time identifica rotinas individuais de uma interface numerando-as por posição no arquivo IDL. A primeira rotina na interface será o número zero, o segundo número um e assim por diante.

InterfaceUUIDStart
O primeiro DWORD da interface UUID.

ServicingTID
O ID da célula do thread que está atendendo essa chamada. Se a chamada não estiver ativa ou expedida, isso conterá informações obsoletas.

CallFlags
Esses valores de sinalizador indicam se essa é a chamada armazenada em cache em uma conexão exclusiva, se essa é uma chamada assíncrona, se é uma chamada de pipe e se é uma chamada LRPC ou OSF.

LastUpdateTime
A hora (em milissegundos após a inicialização) em que as informações de estado do objeto de chamada foram atualizadas pela última vez.

PID
A ID do processo do chamador. Válido somente para chamadas LRPC.

TID
O ID do thread do chamador. Válido somente para chamadas LRPC.

Células de objeto de chamada do cliente

Um objeto CCALL (Chamada de Cliente) é dividido em duas células, pois as informações sobre uma chamada de cliente são muito grandes para caber em uma célula. A primeira célula é chamada informações de chamada do cliente e a segunda é chamada informações de destino de chamada. A maioria das ferramentas mostrará as informações juntas, portanto, você não precisa distinguir entre elas.

As informações sobre chamadas de cliente não são mantidas, a menos que você esteja coletando informações de estado completo. Há uma exceção a essa regra: as informações sobre chamadas de cliente feitas em uma chamada de servidor são mantidas mesmo quando apenas as informações de estado do servidor estão sendo coletadas. Isso permite que você rastreie chamadas que abrangem vários saltos.

Os campos na célula Informações de Chamada do Cliente são:

ProcNum
O número do procedimento (número da operação, em arquivos de captura do NetMon) do método que está sendo chamado. O RPC Run-Time identifica rotinas individuais de uma interface numerando-as por posição no arquivo IDL. A primeira rotina na interface será o número zero, o segundo número um e assim por diante.

ServicingThread
A ID da célula do thread no qual essa chamada é feita.

IfStart
O primeiro DWORD da UUID de interface na qual a chamada é feita.

Ponto de extremidade
Os primeiros 12 caracteres do endpoint no servidor ao qual a chamada foi feita.

Os campos na célula Informações de Destino de Chamada são:

ProtocolSequence
A sequência de protocolo para essa chamada.

HoraDaÚltimaAtualização
A hora (em milissegundos após a inicialização) em que as informações sobre a chamada do cliente ou o destino da chamada foram atualizadas.

TargetServer
Os primeiros 24 caracteres do nome do servidor para o qual a chamada é feita.