Share via


Función RpcNsMgmtHandleSetExpAge (rpcnsi.h)

La función RpcNsMgmtHandleSetExpAge establece la antigüedad de expiración de un identificador de servicio de nombres para las copias locales de los datos del servicio de nombres.

Nota Esta función no se admite en Windows Vista ni en sistemas operativos posteriores.
 

Sintaxis

RPC_STATUS RpcNsMgmtHandleSetExpAge(
  RPC_NS_HANDLE NsHandle,
  unsigned long ExpirationAge
);

Parámetros

NsHandle

Identificador de servicio de nombres para el que se establece una antigüedad de expiración. Se devuelve un identificador de servicio de nombre a partir de una operación de inicio del servicio de nombre.

ExpirationAge

Valor entero, en segundos, que establece la antigüedad de expiración de los datos de servicio de nombres locales leídos por todas las rutinas siguientes mediante el parámetro NsHandle especificado.

Una antigüedad de expiración de 0 provoca una actualización inmediata de los datos locales del servicio de nombres.

Valor devuelto

Valor Significado
RPC_S_OK
La llamada se realizó correctamente.
RPC_S_NAME_SERVICE_UNAVAILABLE
El nombre del servicio no está disponible.
 
Nota Para obtener una lista de códigos de error válidos, consulte Rpc Return Values.
 

Comentarios

La función RpcNsMgmtHandleSetExpAge establece una antigüedad de expiración de identificador para un identificador de nombre y servicio especificado (NsHandle). La antigüedad de expiración es la cantidad de tiempo que puede existir una copia local de datos de un atributo name-service antes de que una solicitud de la aplicación para el atributo requiera actualizar la copia local. Cuando una aplicación comienza a ejecutarse, la biblioteca en tiempo de ejecución rpc especifica una antigüedad de expiración predeterminada de dos horas. El valor predeterminado es global para la aplicación. Una antigüedad de expiración de identificador solo se aplica a un identificador de servicio de nombres específico y invalida temporalmente la antigüedad de expiración global actual.

Una antigüedad de expiración de identificadores se usa exclusivamente por las operaciones siguientes del puntero (que leen datos de atributos de servicio de nombres). Normalmente, una operación siguiente se inicia buscando una copia local de los datos de atributo solicitados por una aplicación. En ausencia de una copia local, la siguiente operación crea uno con datos de atributo nuevos de la base de datos name-service. Si ya existe una copia local, la operación compara su antigüedad real con la edad de expiración que usa la aplicación (que, en este caso, es la edad de expiración establecida para el identificador de servicio de nombres). Si la antigüedad real supera la antigüedad de expiración del identificador, la operación intenta actualizar automáticamente la copia local con datos de atributo nuevos. Si la actualización es imposible, los datos locales antiguos permanecen en su lugar y se produce un error en la siguiente operación, devolviendo el código de estado RPC_S_NAME_SERVICE_UNAVAILABLE.

El ámbito de una antigüedad de expiración de identificadores es una sola serie de operaciones siguientes. La función RpcNsMgmtHandleSetExpAge funciona en el contexto siguiente:

  • Una operación de inicio crea un identificador de servicio de nombre.
  • Una llamada a la función RpcNsMgmtHandleSetExpAge crea una antigüedad de expiración para el identificador.
  • Una serie de operaciones siguientes para el identificador de servicio de nombres usa la antigüedad de expiración del identificador.
  • Una operación realizada para el identificador name-service elimina tanto el identificador como su antigüedad de expiración.
Nota Normalmente, debe evitar el uso de RpcNsMgmtHandleSetExpAge. En su lugar, debe confiar en la antigüedad global de expiración de la aplicación. Establecer la antigüedad de expiración del identificador en un valor pequeño hace que las operaciones del servicio de nombres siguientes actualicen con frecuencia los datos locales para cualquier atributo de servicio de nombre solicitado por la aplicación. Por ejemplo, establecer la antigüedad de expiración en 0 obliga a la siguiente operación a actualizar los datos locales para el atributo name-service solicitado por la aplicación. Por lo tanto, establecer una edad de expiración de identificador pequeña puede crear problemas de rendimiento para la aplicación. Además, si la aplicación usa un servidor de servicio de nombres remoto, una antigüedad de expiración pequeña puede afectar negativamente al rendimiento de red para todas las aplicaciones.
 
Limite el uso de RpcNsMgmtHandleSetExpAge a las siguientes situaciones:
  • Cuando siempre debe obtener datos precisos de name-service.

    Por ejemplo, durante las operaciones de administración para actualizar un perfil, es posible que tenga que ver siempre el contenido actual del perfil. En este caso, antes de empezar a consultar un perfil, la aplicación debe llamar a la función RpcNsMgmtHandleSetExpAge y especificar 0 para el parámetro ExpirationAge .

  • Cuando se produce un error en una solicitud que usa la antigüedad de expiración predeterminada y la aplicación debe reintentar la operación.

    Por ejemplo, una aplicación cliente que use operaciones de importación de servicio de nombres debe intentar primero obtener enlaces mediante la antigüedad de expiración predeterminada de la aplicación. Sin embargo, a veces la operación import-next devuelve ningún identificador de enlace o un número insuficiente de ellos. En este caso, el cliente podría reintentar la operación de importación y, después de la llamada RpcNsBindingImportBegin , incluir una llamada RpcNsMgmtHandleSetExpAge y especificar 0 para el parámetro ExpirationAge . Cuando el cliente llama de nuevo a la función import-next, la pequeña antigüedad de expiración del identificador hace que la operación import-next actualice los datos del atributo local.

Requisitos

   
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado rpcnsi.h (incluir Rpc.h)
Library Rpcns4.lib
Archivo DLL Rpcns4.dll

Consulte también

RpcNsBindingImportBegin

RpcNsMgmtInqExpAge

RpcNsMgmtSetExpAge