Compartir a través de


Host de servicio

El host de servicio es el entorno en 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 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 de para 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 su reutilización.

WsResetServiceHost(serviceHost, NULL);

Cuando la aplicación se realiza con el host de servicio, puede liberar los recursos asociados al host de servicio llamando a la funciónWsFreeServiceHost. Tenga en cuenta que WsCloseServiceHost debe llamarse 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 operaciones de servicio y contrato de servicio.

Seguridad

Una aplicación puede usar las propiedades followin 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, canal, agente de escucha y mensaje propiedades específicas también se pueden modificar mediante la aplicación. Consulte las consideraciones de seguridad de estos componentes antes de modificar cualquiera de estas opciones de configuración.

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

  • Al usar MEX, las aplicaciones deben tener cuidado de no revelar ninguna información confidencial. 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. Se trata de la 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 del 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.

Callback 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 del 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 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 de Restablece el host de servicio para reutilizar y restablece el canal subyacente y los agentes de escucha para su reutilización.

 

Asa 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.