Compartir a través de


Host de servicio

El host de servicio es el entorno de tiempo de ejecución para hospedar un servicio dentro de un proceso.

Un servicio puede configurar uno o varios puntos de conexión dentro de un host de servicio.

Diagrama que muestra la estructura de un host de servicio que contiene un punto de conexión de servicio.

Creación de un host de servicio

Antes de crear un host de servicio, un servicio debe definir sus puntos de conexión. Se especifica un punto de conexión en el host de servicio en la estructura de WS_SERVICE_ENDPOINT y se define mediante la siguiente información:

WS_SERVICE_ENDPOINT serviceEndpoint = {0};
const WS_SERVICE_ENDPOINT* serviceEndpoints[1];
serviceEndpoints[0] = &serviceEndpoint;
WS_STRING url = WS_STRING_VALUE(L"net.tcp://+/Example");

// Method based service contract for the service
static WS_SERVICE_CONTRACT calculatorContract = 
{
    &calculatorContractDescription, // comes from a generated header.
    NULL,
    &calculatorFunctions, // specified by the application
};

serviceEndpoint.address.url = &url;
serviceEndpoint.binding.channelBinding =  WS_TCP_CHANNEL_BINDING; 
serviceEndpoint.contract = &calculatorContract;  
serviceEndpoint.channelType = WS_CHANNEL_TYPE_DUPLEX_SESSION; 
serviceEndpoint.authorizationCallback = AuthorizationCallback; // Authorization callback.

Solo se admiten contratos unidireccionales para SOAP a través de UDP, representados por WS_UDP_CHANNEL_BINDING en la enumeración WS_CHANNEL_BINDING .

Una vez definido un punto de conexión, se puede pasar a la función WsCreateServiceHost , que toma una matriz de punteros a WS_SERVICE_ENDPOINT estructuras.

HRESULT hr = WsCreateServiceHost (serviceEndpoints, 1, NULL, 0, &host, error);

Opcionalmente, una aplicación puede proporcionar una matriz de propiedades de servicio a WsCreateServiceHost para configurar opciones personalizadas en el host de servicio.

Una aplicación abre el host de servicio para empezar a aceptar solicitudes de cliente.

WsOpenServiceHost(serviceHost, NULL, NULL);

Después de abrir el host de servicio, la aplicación puede cerrarla si no hay más operaciones que lo requieran. Tenga en cuenta que esto no libera sus recursos y que se puede volver a abrir con una llamada posterior a WsResetServiceHost.

WsCloseServiceHost(serviceHost, NULL, NULL);

Después de cerrar el host de servicio, una aplicación puede restablecer el host de servicio para reutilizarlo.

WsResetServiceHost(serviceHost, NULL);

Cuando la aplicación se realiza con el host de servicio, puede liberar los recursos asociados al host de servicio mediante una llamada a la función WsFreeServiceHost . Tenga en cuenta que se debe llamar a WsCloseServiceHost antes de llamar a esta función.

WsFreeServiceHost(serviceHost, NULL);

Para obtener información sobre cómo adjuntar un estado personalizado al host de servicio, consulte Estado de host de usuario.

Para obtener información sobre la autorización en un host de servicio para un punto de conexión determinado, consulte Autorización del servicio.

Para obtener información sobre la implementación de operaciones de servicio y contratos de servicio para un servicio, consulte los temas sobre operaciones de servicio y contrato de servicio.

Seguridad

Una aplicación puede usar las propiedades de seguimiento para controlar la cantidad de recursos que el host de servicio asigna en nombre de la aplicación:

Los valores predeterminados seguros se eligen para cada una de estas propiedades, una aplicación debe tener cuidado si desea modificar estas propiedades. Además de las propiedades mencionadas anteriormente, la aplicación también puede modificar las propiedades específicas del canal, el agente de escucha y el mensaje . Consulte las consideraciones de seguridad de estos componentes antes de modificar cualquiera de estas opciones de configuración.

Además, se deben evaluar cuidadosamente las siguientes consideraciones de diseño de aplicaciones al usar la API del host del servicio WWSAPI:

  • Al usar MEX, las aplicaciones deben tener cuidado de no revelar datos confidenciales. Como mitigación, si la naturaleza de los datos que se exponen a través de MEX es confidencial, las aplicaciones pueden optar por configurar el punto de conexión MEX con un enlace seguro que requiera autenticación al menos e implementar la autorización como parte del punto de conexión mediante el WS_SERVICE_SECURITY_CALLBACK.
  • De forma predeterminada, la información de error enriquecida a través de errores se deshabilita en el host de servicio mediante WS_SERVICE_PROPERTY_FAULT_DISCLOSURE propiedad . Está a discreción de la aplicación para enviar información de error enriquecida como parte del error. Sin embargo, esto puede dar lugar a la divulgación de información y, por tanto, se recomienda que esta configuración solo se cambie para escenarios de depuración.
  • Más allá de la validación realizada para la serialización basic Profile 2.0 y XML, el host de servicio no realiza ninguna validación en el contenido de datos recibido como parte de los parámetros de operación de servicio. Es responsabilidad de la aplicación realizar todas las validaciones de parámetros por sí solas.
  • La autorización no se implementa como parte del host de servicio. Sin embargo, las aplicaciones pueden implementar su propio esquema de autorización mediante WS_SECURITY_DESCRIPTION y el WS_SERVICE_SECURITY_CALLBACK.
  • Es responsabilidad de la aplicación usar enlaces seguros en su punto de conexión. El host de servicio no proporciona ninguna seguridad más allá de lo que está configurado en el punto de conexión.

Los siguientes elementos de API se usan con el host de servicio.

Devolución de llamada Descripción
WS_SERVICE_ACCEPT_CHANNEL_CALLBACK Se invoca cuando el host de servicio acepta un canal en un agente de escucha de punto de conexión.
WS_SERVICE_CLOSE_CHANNEL_CALLBACK Se invoca cuando se cierra o anula un canal en un punto de conexión.

 

Enumeración Descripción
WS_SERVICE_ENDPOINT_PROPERTY_ID Parámetros opcionales para configurar un WS_SERVICE_ENDPOINT.
WS_SERVICE_HOST_STATE Indica que un host de servicio puede estar en.
WS_SERVICE_PROPERTY_ID Parámetros opcionales para configurar el host de servicio.

 

Función Descripción
WsAbortServiceHost Interrumpe y interrumpe las operaciones actuales en el host de servicio.
WsCloseServiceHost Cierra todos los agentes de escucha para que no se acepte ningún nuevo canal del cliente.
WsCreateServiceHost Crea un host de servicio.
WsFreeServiceHost Libera la memoria asociada a un objeto host de servicio.
WsGetServiceHostProperty Recupera una propiedad de host de servicio especificada.
WsOpenServiceHost Abre un host de servicio para la comunicación e inicia los agentes de escucha en todos los puntos de conexión.
WsResetServiceHost Restablece el host de servicio para reutilizar y restablece el canal subyacente y los agentes de escucha para su reutilización.

 

Handle Descripción
WS_SERVICE_HOST Tipo opaco que se usa para hacer referencia a un host de servicio.

 

Estructura Descripción
WS_SERVICE_ENDPOINT Representa un punto de conexión individual en un host de servicio.
WS_SERVICE_ENDPOINT_PROPERTY Especifica una configuración específica del servicio.
WS_SERVICE_PROPERTY Especifica una configuración específica del servicio.
WS_SERVICE_PROPERTY_ACCEPT_CALLBACK Especifica la devolución de llamada a la que se llama cuando se acepta correctamente un canal.
WS_SERVICE_PROPERTY_CLOSE_CALLBACK Especifica la devolución de llamada a la que se llama cuando un canal está a punto de cerrarse.