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.
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:
- Una dirección, que es el URI físico en el que se hospedará el servicio.
- Estructura WS_CHANNEL_TYPE que especifica el tipo del canal subyacente para el punto de conexión.
- Estructura WS_CHANNEL_BINDING que especifica el enlace del canal.
- Estructura WS_SECURITY_DESCRIPTION que contiene la descripción de seguridad del punto de conexión.
- Estructura WS_SERVICE_CONTRACT que representa el contrato de servicio para el punto de conexión.
- Estructura WS_SERVICE_SECURITY_CALLBACK que especifica una función de devolución de llamada de autorización para el punto de conexión.
- Estructura WS_SERVICE_ENDPOINT_PROPERTY que contiene una matriz de propiedades de punto de conexión de servicio.
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.
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:
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_ACCEPTING_CHANNELS,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CONCURRENCY,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CHANNELS,
- WS_SERVICE_ENDPOINT_PROPERTY_BODY_HEAP_MAX_SIZE,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CALL_POOL_SIZE,
- WS_SERVICE_ENDPOINT_PROPERTY_MAX_CHANNEL_POOL_SIZE.
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. |