Concepto y términos de IT para otros departamentos

Hoy en día las empresas tienen una alta dependencia de la tecnología para poder realizar las principales tareas o procesos de su negocio.

El concepto IT o tecnología de la información ha tomado gran relevancia para cualquier tipo de negocio y hace referencia a todos sus recursos relacionados con los sistemas informáticos y tecnológicos que utiliza.

Qué es IT

Cuando se habla de IT (Information Technology) se hace referencia a las tecnologías de la información y la comunicación que se encargan de la gestión de la información que un negocio, relacionadas con internet, la informática y la tecnología.

Dentro de los recursos IT de una empresa se recoge el hardware, software, redes, telecomunicaciones y personal relacionado con el intercambio y uso de datos. Aunque normalmente se hace referencia con el acrónimo IT, también es habitual que se nombre como TI o TIC en referencia a su denominación en español.

Términos y acrónimos utilizados en IT

A continuación presentamos algunos de los términos más comunes que se manejan en relación con la tecnología de la información:

CRM

La gestión de la relación con los clientes o CRM (Customer Relationship Management) es un software de gestión empresarial que tiene como principal objetivo centralizar y organizar todas las relaciones que un cliente tiene con la empresa, independientemente del canal de comunicación que utilice para ello (formularios web, correo electrónico, llamada de teléfono, chat online, etc.).

Con este tipo de programas, los equipos de trabajo pueden acceder en tiempo real a toda la información disponible sobre un cliente, mejorando su relación, facilitando el cierre de ventas y contratos de servicio y disponiendo de un conocimiento profundo del cliente que permite anticiparse a las necesidades.

ERP

Un ERP (Enterprise Resource Planning), o programa para la gestión de recursos empresariales, se encarga de gestionar los distintos procesos y operaciones internas de una empresa. Se trata de soluciones flexibles y escalables que se adaptan a las necesidades de cada negocio, centralizando la información y compartiéndola con todas las áreas de la empresa.

A pesar de que este tipo de programas estaba asociado a grandes empresas, en la actualidad existen soluciones ERP para empresas medianas y pymes.

Outsourcing

El outsourcing o externalización de servicios es una alternativa que utilizan cada vez más las empresas para encargar a un tercero el desempeño de alguna de las tareas de su negocio. Este tipo de contratación externa se realiza en busca de una mayor eficiencia, ahorro de costes y acceso a tecnología y personal cualificado.

IoT

El IoT (Internet of Things), o internet de las cosas, es una nueva tecnología que consiste en dotar a dispositivos y aparatos de la capacidad de comunicarse con el usuario y entre ellos. Gracias al uso de sensores, conexiones de red, software y otras tecnologías, elementos y dispositivos tradicionales como relojes y electrodomésticos, entre otros, intercambian información.

Para el departamento IT de una empresa IoT tiene cantidad de utilidades, facilitando el mantenimiento y reparación de hardware, por ejemplo.

FrontEnd

El FrontEnd es la parte de un sitio web o aplicación con la que los usuarios interactúan de forma directa; y está compuesta por menús, botones, campos para introducir datos, textos informativos y otros elementos necesarios.

BackOffice

El BackOffice recoge las actividades de gestión o administrativas de una empresa que no tienen un contacto directo con el cliente. Se trata de un área que no genera ingresos para la empresa, pero que juega un papel fundamental para su buen funcionamiento, ya que actúa como el motor del negocio.

Entre las principales tareas que realiza el BackOffice de una empresa se encuentra la organización del personal, facturación, financiación, control de stock, seguimientos de clientes, etc.

DevOps

DevOps (acrónimo inglés de development y operations) es una metodología de trabajo para el desarrollo de software que favorece el trabajo colaborativo y que tiene como objetivo entregar al cliente un producto de mayor calidad de forma mucho más rápida.

El desarrollo ágil centrado en ofrecer mayor valor al cliente y una entrega continua son partes de la filosofía DevOps. Con la implantación de esta metodología se definen nuevos roles dentro del departamento IT de una empresa de desarrollo de software con un carácter más colaborativo y participando en más partes del ciclo de vida de desarrollo de un programa.

Agile

Agile, o las metodologías ágiles, hace referencia a una serie de técnicas de gestión empresarial que persiguen que una empresa funcione de forma mucho más eficiente con un flujo de trabajo optimizado. Implementar estas metodologías implica dividir los procesos en pequeñas tareas que son más fáciles de abordar, consiguiendo incrementar la calidad y hacer más rápidos los tiempos de entrega al usuario.

Una empresa Ágil se apoya en herramientas visuales y sofisticadas para gestionar las tareas y facilitar la labor de sus equipos de trabajo (diagramas de Gantt, tableros Kanban o cuadros de mando, por ejemplo).

SaaS

El software como servicio o SaaS (Software as a Service) en un servicio que permite el acceso a aplicaciones que se ejecutan en la nube. Los proveedores SaaS ofrecen acceso a empresas y usuarios a software que se ejecuta en sus servidores y a los que pueden acceder de forma remota, utilizando su navegador web, por ejemplo.

Los servicios SaaS son cada vez más comunes en el entorno laboral por los grandes beneficios que aportan.

SLA

Un SLA (Service Level Agreement) o acuerdo de nivel de servicio es un contrato que se firma entre un proveedor de servicios y el cliente, donde se recoge el objetivo del servicio, una lista de las distintas condiciones que debe ofrecer el servicio (recogido en métricas específicas) y la responsabilidad y obligaciones tanto del proveedor como del usuario.

El SLA, o ANS en español, es un acuerdo que describe el nivel de servicio que un cliente espera recibir por parte de su proveedor de servicio.

ITIL

ITIL (Information Technology Infrastructure Library) recoge un conjunto de las mejores prácticas para la gestión de servicios TI con el objetivo de mejorar la calidad del servicio y garantizar un funcionamiento óptimo de los sistemas informáticos y tecnologías de la información de una empresa.

La metodología ITIL propone la aplicación de una serie de prácticas estandarizadas y reconocidas a nivel internacional para mejorar el funcionamiento del departamento de TI y la prestación de servicios.

Son muchos los términos que se manejan en el departamento IT y que es de gran utilidad que sean conocidos por otros departamentos o áreas de la empresa. La tecnología está en constante evolución y siempre aparecen nuevos términos asociados a innovaciones y avances tecnológicos que se aplican para mejorar el funcionamiento y productividad de los negocios.

AMBIT BST

En AMBIT somos expertos desde hace más de 15 años en el desarrollo de estrategias y soluciones IT para tu compañía. Somos consultores e integradores en múltiples ámbitos, y si quieres conocer más de las soluciones que te podemos ofrecer, no dudes enponerte en contacto con nosotros.

Conceptos básicos de redes - UWP applications

Tabla de contenido

Conceptos básicos de redes

Artículo

04/02/2022

Tiempo de lectura: 19 minutos

8 colaboradores

En este artículo

Cosas que debes hacer para cualquier aplicación habilitada para la red

Funcionalidades

Para usar la funciones de red, debes agregar elementos de la funcionalidad apropiada al manifiesto de la aplicación. Si no se especifica ninguna funcionalidad de red en el manifiesto de la aplicación, la aplicación no tendrá ninguna funcionalidad de red y se producirá un error de cualquier intento de conexión a la red.

Definamos las funcionalidades de red más usadas:

Capacidad Descripción internetClient Proporciona acceso saliente a Internet y a redes de lugares públicos, como aeropuertos y cafeterías. La mayoría de las aplicaciones que requieren acceso a Internet deben usar esta funcionalidad. internetClientServer Proporciona a la aplicación acceso entrante y saliente a Internet de redes en lugares públicos, como aeropuertos y cafeterías. privateNetworkClientServer Otorga a la aplicación acceso entrante y saliente a la Red en lugares de confianza del usuario, como su hogar o el trabajo.

En determinadas circunstancias, existen otras funcionalidades que pueden ser necesarias para la aplicación.

Capacidad Descripción enterpriseAuthentication Permite que una aplicación se conecte a los recursos de red que precisan credenciales de dominio. Por ejemplo, una aplicación que recupera datos de servidores SharePoint en una Intranet privada. Con esta funcionalidad puedes usar tus credenciales para acceder a recursos de la red en una red que exija credenciales. Una aplicación con esta funcionalidad puede suplantarte en la red. No necesitas esta funcionalidad para que la aplicación pueda obtener acceso a Internet a través de un proxy de autenticación.

Para obtener más información, consulta la documentación para el escenario de la funcionalidad de Enterprise en Funcionalidades restringidas. proximity Es necesaria para la comunicación de datos en proximidad con dispositivos que se encuentran cerca del equipo. La comunicación de datos en proximidad puede usarse para realizar envíos o para conectar con una aplicación de un dispositivo cercano.

Esta funcionalidad permite que la aplicación acceda a la red para conectarse a un dispositivo en proximidad, con el consentimiento del usuario para enviar una invitación o aceptarla. sharedUserCertificates Esta funcionalidad permite que la aplicación obtenga acceso a los certificados de software y hardware como, por ejemplo, los certificados de una tarjeta inteligente. Cuando se invoca esta funcionalidad en tiempo de ejecución, el usuario debe realizar ciertas acciones, como insertar una tarjeta o seleccionar un certificado.

Con esta funcionalidad, se usan los certificados de software y hardware o una tarjeta inteligente para la identificación en la aplicación. Esta funcionalidad la pueden usar para la identificación el empleador, el banco o los servicios gubernamentales.

Comunicación cuando la aplicación no está en primer plano

El artículo Support your app with background tasks (Consigue que tu aplicación sea compatible con tareas en segundo plano) contiene información general sobre el uso de tareas en segundo plano para que realicen trabajos cuando la aplicación no esté en primer plano. Más concretamente, tu código debe realizar unos pasos especiales para recibir notificaciones cuando no es la aplicación en primer plano actual y llegan datos a través de la red para esta. Usaste desencadenadores de canal de control para este propósito en Windows 8 y aún se admiten en Windows 10. Encontrarás información completa acerca del uso de desencadenadores de canal de control aquí. Esta nueva tecnología de Windows 10 proporciona una mejor funcionalidad con menos sobrecarga en algunos escenarios, como los siguientes sockets de secuencia habilitados para la inserción: el agente de sockets y los desencadenadores de actividad de socket.

Si la aplicación usa DatagramSocket, StreamSocket o StreamSocketListener, podrá transferir la propiedad de un socket abierto a un agente de sockets proporcionado por el sistema y, a continuación, salir del primer plano o incluso cerrarse. Cuando se establece una conexión en el socket transferido o si llega tráfico a ese socket, se activa la aplicación o su tarea en segundo plano designada. Si la aplicación no se está ejecutando, se iniciará. A continuación, el agente de sockets notifica a la aplicación mediante la clase SocketActivityTrigger, que hay tráfico nuevo. Es entonces cuando la aplicación recupera el socket desde el agente de sockets y procesa el tráfico en el mismo socket. Esto significa que la aplicación consume menos recursos del sistema cuando no se está procesando activamente el tráfico de red.

El agente de socket está pensado para reemplazar los desencadenadores de canal de control cuando sea aplicable, ya que proporciona la misma funcionalidad, pero con menos restricciones y una menor superficie de memoria. El agente de socket puede usarse en aplicaciones que no son aplicaciones con pantalla de bloqueo y se usa la misma manera en los teléfonos como en otros dispositivos. Las aplicaciones no necesitan estar ejecutándose cuando llegue el tráfico para que sean activadas por el agente de socket. Además, el agente de socket admite la capacidad de escuchar en los sockets TCP, que no son compatibles con los desencadenadores de canal de control.

Elección de un desencadenador de red

Hay algunos escenarios donde cualquier tipo de desencadenador sería adecuado. Cuando elijas qué tipo de desencadenador usar en tu aplicación, ten en cuenta lo siguiente.

SI estás usando IXMLHTTPRequest2 , System.Net.Http.HttpClient o System.Net.Http.HttpClientHandler, debes usar ControlChannelTrigger .

, o System.Net.Http.HttpClientHandler, debes usar . Si estás usando elementos StreamSockets habilitados para la inserción, puedes usar desencadenadores de canal de control, pero deberías tener como preferencia la clase SocketActivityTrigger . La última opción permite que el sistema tenga más espacio en la memoria y reduzca los requisitos de energía cuando la conexión no se use activamente.

habilitados para la inserción, puedes usar desencadenadores de canal de control, pero deberías tener como preferencia la clase . La última opción permite que el sistema tenga más espacio en la memoria y reduzca los requisitos de energía cuando la conexión no se use activamente. Si deseas minimizar la superficie de memoria de la aplicación cuando no está dando servicio activamente a las solicitudes de red, ten como preferencia SocketActivityTrigger , cuando te sea posible.

, cuando te sea posible. Si quieres que tu aplicación pueda recibir datos mientras el sistema está en modo de espera conectado, usa SocketActivityTrigger.

Para ver detalles y ejemplos acerca de cómo usar el agente de sockets, consulta Comunicaciones de red en segundo plano.

Conexiones seguras

Los protocolos Capa de sockets seguros (SSL) y Seguridad de la capa de transporte (TLS) son protocolos criptográficos diseñados para proporcionar autenticación y cifrado para comunicaciones de red. Estos protocolos están diseñados para evitar interceptaciones y alteraciones cuando se envían y reciben datos de red. Usan un modelo de cliente-servidor para los intercambios de protocolos. También usan certificados digitales y entidades de certificación para comprobar que el servidor sea realmente el que dice ser.

Crear conexiones de sockets seguras

Un objeto StreamSocket se puede configurar para usar SSL/TLS en comunicaciones entre el cliente y el servidor. Esta compatibilidad con SSL/TLS se limita al uso del objeto StreamSocket como cliente en la negociación de SSL/TLS. No se puede usar SSL/TLS con el objeto StreamSocket que haya creado la clase StreamSocketListener cuando se reciben comunicaciones entrantes, porque la clase StreamSocket no implementa la negociación de SSL/TLS como servidor.

Hay dos formas de asegurar una conexión de StreamSocket con SSL/TLS:

ConnectAsync : establece la conexión inicial a un servicio de red y negocia inmediatamente el uso de SSL/TLS de todas las comunicaciones.

: establece la conexión inicial a un servicio de red y negocia inmediatamente el uso de SSL/TLS de todas las comunicaciones. UpgradeToSslAsync: conecta inicialmente con un servicio de red sin cifrado. La aplicación puede enviar o recibir datos. A continuación, actualiza la conexión para usar SSL/TLS en todas las comunicaciones.

El SocketProtectionLevel especifica el nivel de protección de socket deseado con el que la aplicación quiere establecer o actualizar la conexión. Sin embargo, el nivel de protección definitivo de la conexión establecida se determina en un proceso de negociación entre ambos puntos de la conexión. El resultado puede ser un nivel de protección inferior que el especificado, si el otro punto de conexión solicita un nivel inferior.

Una vez finalizada correctamente la operación asincrónica, puede recuperar el nivel de protección solicitado que se usó en la llamada ConnectAsync o UpgradeToSslAsync a través de la propiedad StreamSocketinformation.ProtectionLevel. Sin embargo, esto no refleja el nivel de protección real que la conexión está usando.

Nota El código no debe depender implícitamente del uso de un nivel de protección concreto, ni de la suposición de que se usa un nivel de seguridad específico de manera predeterminada. El panorama de seguridad cambia constantemente, y los protocolos y niveles de protección predeterminados cambian con el tiempo para evitar el uso de protocolos con puntos débiles conocidos. Los valores predeterminados pueden variar según la configuración del equipo individual o según el software instalado y las revisiones aplicadas. Si la aplicación depende del uso de un nivel de seguridad concreto, debes especificar explícitamente ese nivel y, a continuación, comprobar que realmente se usa en la conexión establecida.

Usar ConnectAsync

ConnectAsync se puede usar para establecer la conexión inicial a un servicio de red y, a continuación, negociar inmediatamente el uso de SSL/TLS de todas las comunicaciones. Hay dos métodos ConnectAsync que admiten pasar un parámetro protectionLevel:

ConnectAsync(EndpointPair, SocketProtectionLevel) : inicia una operación asincrónica en un objeto StreamSocket para establecer la conexión con un destino de red remoto especificado como un objeto EndpointPair y una enumeración SocketProtectionLevel .

: inicia una operación asincrónica en un objeto para establecer la conexión con un destino de red remoto especificado como un objeto y una enumeración . ConnectAsync(HostName, String, SocketProtectionLevel): inicia una operación asincrónica en un objeto StreamSocket para establecer la conexión a un destino remoto especificado por un nombre de host remoto, un nombre de servicio remoto y una enumeración SocketProtectionLevel.

Si el parámetro protectionLevel se establece en Windows.Networking.Sockets.SocketProtectionLevel.Ssl cuando se llama a cualquiera de los métodos ConnectAsync arriba mencionados, la clase StreamSocket deberá establecerse para usar SSL/TLS en el cifrado. Este valor requiere cifrado y nunca permite el uso de un cifrado NULL.

La secuencia normal que puedes usar con uno de estos métodos ConnectAsync es la misma.

Crea una clase StreamSocket .

. Si necesitas una opción avanzada en el socket, usa la propiedad StreamSocket.Control para obtener la instancia StreamSocketControl asociada a un objeto StreamSocket . Establece una propiedad en StreamSocketControl .

para obtener la instancia asociada a un objeto . Establece una propiedad en . Llama a uno de los métodos ConnectAsync arriba mencionados, para iniciar una operación de conexión a un destino remoto y negociar inmediatamente el uso de SSL/TLS.

arriba mencionados, para iniciar una operación de conexión a un destino remoto y negociar inmediatamente el uso de SSL/TLS. La intensidad de SSL negociada con el método ConnectAsync puede determinarse al obtener la propiedad StreamSocketinformation.ProtectionLevel después de que la operación asincrónica se haya completado correctamente.

El siguiente ejemplo crea un objeto StreamSocket e intenta establecer una conexión al servicio de red y negociar de inmediato el uso de SSL/TLS. Si la negociación se realiza correctamente, toda comunicación de red que use el objeto StreamSocket entre el cliente y el servidor de red será cifrada.

using Windows.Networking; using Windows.Networking.Sockets; // Define some variables and set values StreamSocket clientSocket = new StreamSocket(); HostName serverHost = new string serverServiceName = "https"; // For simplicity, the sample omits implementation of the // NotifyUser method used to display status and error messages // Try to connect to contoso using HTTPS (port 443) try { // Call ConnectAsync method with SSL await clientSocket.ConnectAsync(serverHost, serverServiceName, SocketProtectionLevel.Ssl); NotifyUser("Connected"); } catch (Exception exception) { // If this is an unknown status it means that the error is fatal and retry will likely fail. if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown) { throw; } NotifyUser("Connect failed with error: " + exception.Message); // Could retry the connection, but for this simple example // just close the socket. clientSocket.Dispose(); clientSocket = null; } // Add code to send and receive data using the clientSocket // and then close the clientSocket

#include using namespace winrt; ... // Define some variables, and set values. Windows::Networking::Sockets::StreamSocket clientSocket; Windows::Networking::HostName serverHost{ }; winrt::hstring serverServiceName{ L"https" }; // For simplicity, the sample omits implementation of the // NotifyUser method used to display status and error messages. // Try to connect to the server using HTTPS and SSL (port 443). try { co_await clientSocket.ConnectAsync(serverHost, serverServiceName, Windows::Networking::Sockets::SocketProtectionLevel::Tls12); NotifyUser(L"Connected"); } catch (winrt::hresult_error const& exception) { NotifyUser(L"Connect failed with error: " + clientSocket = nullptr; } // Add code to send and receive data using the clientSocket, // then set the clientSocket to nullptr when done to close it.

using Windows::Networking; using Windows::Networking::Sockets; // Define some variables and set values StreamSocket^ clientSocket = new ref StreamSocket(); HostName^ serverHost = new ref String serverServiceName = "https"; // For simplicity, the sample omits implementation of the // NotifyUser method used to display status and error messages // Try to connect to the server using HTTPS and SSL (port 443) task(clientSocket->ConnectAsync(serverHost, serverServiceName, (task previousTask) { try { // Try getting all exceptions from the continuation chain above this point. previousTask.Get(); NotifyUser("Connected"); } catch (Exception^ exception) { NotifyUser("Connect failed with error: " + exception->Message); clientSocket.Close(); clientSocket = null; } }); // Add code to send and receive data using the clientSocket // Then close the clientSocket when done

Usar UpgradeToSslAsync

Si tu código usa UpgradeToSslAsync, establece primero una conexión a un servicio de red sin cifrado. La aplicación puede enviar o recibir algunos datos. A continuación, actualiza la conexión para usar SSL/TLS en todas las comunicaciones.

El método UpgradeToSslAsync usa dos parámetros. El parámetro protectionLevel indica el nivel de protección que quieres. El parámetro validationHostName es el nombre de host del destino de red remota que se usa para la validación, cuando se actualiza a SSL. Por lo general, el parámetro validationHostName es el mismo nombre de host que usó la aplicación para establecer inicialmente la conexión. Si el parámetro protectionLevel se establece como Windows.System.Socket.SocketProtectionLevel.Ssl al llamar a UpgradeToSslAsync, la clase StreamSocket deberá usar el SSL/TLS para cifrar las posibles comunicaciones con el socket. Este valor requiere cifrado y nunca permite el uso de un cifrado NULL.

La secuencia normal que puedes usar con el método UpgradeToSslAsync es la siguiente:

Crea una clase StreamSocket .

. Si necesitas una opción avanzada en el socket, usa la propiedad StreamSocket.Control para obtener la instancia StreamSocketControl asociada a un objeto StreamSocket . Establece una propiedad en StreamSocketControl .

para obtener la instancia asociada a un objeto . Establece una propiedad en . Si necesitas enviar o recibir algún dato sin cifrar, envíalo ahora.

Llama al método UpgradeToSslAsync para iniciar una operación de actualización que te permita usar SSL/TLS en la conexión.

para iniciar una operación de actualización que te permita usar SSL/TLS en la conexión. Puedes determinar la intensidad de SSL negociada con UpgradeToSslAsync al obtener la propiedad StreamSocketinformation.ProtectionLevel, una vez que la operación asincrónica se complete correctamente.

El siguiente ejemplo crea una clase StreamSocket e intenta establecer una conexión al servicio de red, enviar algunos datos iniciales y, a continuación, negociar el uso de SSL/TLS. Si la negociación se realiza correctamente, toda comunicación de red que use la clase StreamSocket entre el cliente y el servidor de red estará cifrada.

using Windows.Networking; using Windows.Networking.Sockets; using Windows.Storage.Streams; // Define some variables and set values StreamSocket clientSocket = new StreamSocket(); HostName serverHost = new string serverServiceName = "http"; // For simplicity, the sample omits implementation of the // NotifyUser method used to display status and error messages // Try to connect to contoso using HTTP (port 80) try { // Call ConnectAsync method with a plain socket await clientSocket.ConnectAsync(serverHost, serverServiceName, SocketProtectionLevel.PlainSocket); NotifyUser("Connected"); } catch (Exception exception) { // If this is an unknown status it means that the error is fatal and retry will likely fail. if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown) { throw; } NotifyUser("Connect failed with error: " + exception.Message, NotifyType.ErrorMessage); // Could retry the connection, but for this simple example // just close the socket. clientSocket.Dispose(); clientSocket = null; return; } // Now try to send some data DataWriter writer = new DataWriter(clientSocket.OutputStream); string hello = "Hello, World! ☺ "; Int32 len = (int) writer.MeasureString(hello); // Gets the UTF-8 string length. writer.WriteInt32(len); writer.WriteString(hello); NotifyUser("Client: sending hello"); try { // Call StoreAsync method to store the hello message await writer.StoreAsync(); NotifyUser("Client: sent data"); writer.DetachStream(); // Detach stream, if not, DataWriter destructor will close it. } catch (Exception exception) { NotifyUser("Store failed with error: " + exception.Message); // Could retry the store, but for this simple example // just close the socket. clientSocket.Dispose(); clientSocket = null; return; } // Now upgrade the client to use SSL try { // Try to upgrade to SSL await clientSocket.UpgradeToSslAsync(SocketProtectionLevel.Ssl, serverHost); NotifyUser("Client: upgrade to SSL completed"); // Add code to send and receive data // The close clientSocket when done } catch (Exception exception) { // If this is an unknown status it means that the error is fatal and retry will likely fail. if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown) { throw; } NotifyUser("Upgrade to SSL failed with error: " + exception.Message); clientSocket.Dispose(); clientSocket = null; return; }

#include #include using namespace winrt; using namespace Windows::Storage::Streams; ... // Define some variables, and set values. Windows::Networking::Sockets::StreamSocket clientSocket; Windows::Networking::HostName serverHost{ }; winrt::hstring serverServiceName{ L"https" }; // For simplicity, the sample omits implementation of the // NotifyUser method used to display status and error messages. // Try to connect to the server using HTTP (port 80). try { co_await clientSocket.ConnectAsync(serverHost, serverServiceName, Windows::Networking::Sockets::SocketProtectionLevel::PlainSocket); NotifyUser(L"Connected"); } catch (winrt::hresult_error const& exception) { NotifyUser(L"Connect failed with error: " + clientSocket = nullptr; } // Now, try to send some data. DataWriter writer{ clientSocket.OutputStream() }; winrt::hstring hello{ L"Hello, World! ☺ " }; uint32_t len{ writer.MeasureString(hello) }; // Gets the size of the string, in bytes. writer.WriteInt32(len); writer.WriteString(hello); NotifyUser(L"Client: sending hello"); try { co_await writer.StoreAsync(); NotifyUser(L"Client: sent hello"); writer.DetachStream(); // Detach the stream when you want to continue using it; otherwise, the DataWriter destructor closes it. } catch (winrt::hresult_error const& exception) { NotifyUser(L"Store failed with error: " + // We could retry the store operation. But, for this simple example, just close the socket by setting it to nullptr. clientSocket = nullptr; co_return; } // Now, upgrade the client to use SSL. try { co_await clientSocket.UpgradeToSslAsync(Windows::Networking::Sockets::SocketProtectionLevel::Tls12, serverHost); NotifyUser(L"Client: upgrade to SSL completed"); // Add code to send and receive data using the clientSocket, // then set the clientSocket to nullptr when done to close it. } catch (winrt::hresult_error const& exception) { // If this is an unknown status, then the error is fatal and retry will likely fail. Windows::Networking::Sockets::SocketErrorStatus socketErrorStatus{ }; if (socketErrorStatus == Windows::Networking::Sockets::SocketErrorStatus::Unknown) { throw; } NotifyUser(L"Upgrade to SSL failed with error: " + // We could retry the store operation. But for this simple example, just close the socket by setting it to nullptr. clientSocket = nullptr; co_return; }

using Windows::Networking; using Windows::Networking::Sockets; using Windows::Storage::Streams; // Define some variables and set values StreamSocket^ clientSocket = new ref StreamSocket(); Hostname^ serverHost = new ref String serverServiceName = "http"; // For simplicity, the sample omits implementation of the // NotifyUser method used to display status and error messages // Try to connect to contoso using HTTP (port 80) task(clientSocket->ConnectAsync(serverHost, serverServiceName, (task previousTask) { try { // Try getting all exceptions from the continuation chain above this point. previousTask.Get(); NotifyUser("Connected"); } catch (Exception^ exception) { NotifyUser("Connect failed with error: " + exception->Message); clientSocket->Close(); clientSocket = null; } }); // Now try to send some data DataWriter^ writer = new ref DataWriter(clientSocket.OutputStream); String hello = "Hello, World! ☺ "; Int32 len = (int) writer->MeasureString(hello); // Gets the UTF-8 string length. writer->writeInt32(len); writer->writeString(hello); NotifyUser("Client: sending hello"); (task previousTask) { try { // Try getting all exceptions from the continuation chain above this point. previousTask.Get(); NotifyUser("Client: sent hello"); writer->DetachStream(); // Detach stream, if not, DataWriter destructor will close it. } catch (Exception^ exception) { NotifyUser("Store failed with error: " + exception->Message); // Could retry the store, but for this simple example // just close the socket. clientSocket->Close(); clientSocket = null; return } }); // Now upgrade the client to use SSL task(clientSocket->UpgradeToSslAsync(clientSocket.SocketProtectionLevel.Ssl, (task previousTask) { try { // Try getting all exceptions from the continuation chain above this point. previousTask.Get(); NotifyUser("Client: upgrade to SSL completed"); // Add code to send and receive data // Then close clientSocket when done } catch (Exception^ exception) { // If this is an unknown status it means that the error is fatal and retry will likely fail. if (SocketError.GetStatus(exception.HResult) == SocketErrorStatus.Unknown) { throw; } NotifyUser("Upgrade to SSL failed with error: " + exception.Message); clientSocket->Close(); clientSocket = null; return; } });

Crear conexiones WebSocket seguras

Al igual que las conexiones de sockets tradicionales, las conexiones WebSocket también pueden cifrarse mediante el cifrado Seguridad de la capa de transporte (TLS) o Capa de sockets seguros (SSL), cuando se usan las características StreamWebSocket y MessageWebSocket para una aplicación para UWP. En la mayoría de los casos, querrás usar una conexión WebSocket segura. Esto aumentará las posibilidades de que tu conexión se realice correctamente, ya que muchos servidores proxy rechazarán las conexiones WebSocket no cifradas.

Para obtener ejemplos sobre cómo crear o actualizar una conexión de sockets segura a un servicio de red, consulta Cómo proteger conexiones WebSocket con TLS/SSL.

Además del cifrado con TLS/SSL, es posible que un servidor necesite un valor de encabezado Sec-WebSocket-Protocol para completar el protocolo de enlace inicial. Este valor, representado por las propiedades StreamWebSocketInformation.Protocol y MessageWebSocketInformation.Protocol, indica la versión del protocolo de la conexión y permite que el servidor interprete correctamente el protocolo de enlace de apertura y los datos que se intercambian después. Mediante esta información del protocolo, si en algún momento el servidor no puede interpretar los datos entrantes de manera segura, se puede cerrar la conexión.

Si la solicitud inicial del cliente no contiene este valor o proporciona un valor que no coincide con el que espera el servidor, el valor esperado se envía desde el servidor al cliente a modo de error de protocolo de enlace de WebSocket.

Autenticación

Cómo proporcionar credenciales de autenticación al conectarse a través de la red.

Aprovisionamiento de un certificado de cliente con la clase StreamSocket

La clase Windows.Networking.Sockets.StreamSocket admite el uso de SSL/TLS para autenticar el servidor con el que se comunica la aplicación. En algunos casos, la aplicación también debe autenticarse en el servidor mediante un certificado de cliente TLS. En Windows 10, puedes proporcionar un certificado de cliente en el objeto StreamSocket.Control (se debe establecer antes de iniciar el protocolo de enlace TLS). Si el servidor solicita el certificado de cliente, Windows responderá con el certificado proporcionado.

Este es un fragmento de código que muestra cómo puedes implementar esto:

var socket = new StreamSocket(); Windows.Security.Cryptography.Certificates.Certificate certificate = await GetClientCert(); socket.Control.ClientCertificate = certificate; await socket.ConnectAsync(destination, SocketProtectionLevel.Tls12);

Proporcionar credenciales de autenticación a un servicio web

Las API para redes que permiten que las aplicaciones interactúen con servicios web seguros, proporcionan sus propios métodos para inicializar un cliente o establecer un encabezado de solicitud con credenciales de autenticación de proxy y servidor. Cada método se establece con un objeto PasswordCredential que indica un nombre de usuario, una contraseña y el recurso para el cual se usan estas credenciales. En la siguiente tabla, se proporciona una relación de estas API:

Controlar excepciones de red

En la mayoría de las áreas de programación, una excepción indica un error o problema significativo, causado por algún error en el programa. En la programación de red, existe un origen adicional para excepciones: la propia red y la naturaleza de las comunicaciones de red. Las comunicaciones de red son inherentemente no confiables y están propensas a errores inesperados. Para cada una de las formas en que la aplicación usa la conexión de red, debes mantener alguna información de estado; y el código de la aplicación debe controlar las excepciones de red actualizando esa información de estado e iniciando la lógica adecuada para tu aplicación para restablecer o reintentar en caso de errores de comunicación.

Cuando las aplicaciones universales de Windows arrojan una excepción, el controlador de excepciones puede recuperar información más detallada sobre la causa de la excepción para que así puedas comprender mejor el error y tomar las decisiones adecuadas.

Cada proyección de lenguaje admite un método para obtener acceso a esta información detallada. Una excepción se proyecta como un valor HRESULT en las aplicaciones universales de Windows. El archivo de inclusión Winerror.h contiene una lista muy extensa de posibles valores HRESULT, que incluye errores de red.

Las API para redes admiten distintos métodos para recuperar la información que detalla la causa de una excepción.

Algunas API proporcionan un método auxiliar que convierte el valor HRESULT de la excepción en un valor de enumeración.

de la excepción en un valor de enumeración. Otras API proporcionan un método para recuperar el valor HRESULT real.

Temas relacionados

¿Qué es la telemática? Concepto y aplicaciones

Un campo interdisciplinario que abarca las telecomunicaciones, las tecnologías vehiculares, el transporte por carretera, la seguridad vial, la ingeniería eléctrica y la informática. Es la telemática, y en este post os hablamos de ella.

¿Qué es la telemática?

La palabra telemática se refiere a la combinación de la informática y de la tecnología de la comunicación para el envío y recepción de datos.

En sentido amplio, resulta de la unión de las telecomunicaciones y la informática, pudiendo implicar desde la tecnología de envío, recepción y almacenamiento de información a través de dispositivos de telecomunicación hasta su aplicación en vehículos, la llamada telemática de vehículos.

Y es que, a pesar de que la telemática se sigue usando en múltiples ámbitos, es un término que en la actualidad se usa con frecuencia para hacer referencia a las soluciones telemáticas aplicadas en vehículos.

¿En qué consiste la telemática? Funcionamiento

Los sistemas telemáticos cuentan con un dispositivo de seguimiento que envía, recibe y almacena datos.

El dispositivo recoge, junto a los datos GPS, otra información específica y la transmite a un servidor centralizado a través de redes móviles o satélite para que la interprete y la muestre al usuario final en tiempo real en sitios web seguros o aplicaciones optimizadas para teléfonos móviles y tablets.

¿De qué se encarga la telemática? Aplicaciones

Con un mundo cada vez más conectado, el uso de la telemática en la actualidad no tiene prácticamente límites. Continuamente aumenta el número de dispositivos interconectados al Internet of Things (IoT) o Internet de las cosas y se desarrollan nuevas formas de usar la información.

Por un lado, nos encontramos con la llamada telemática de vehículos, que permite el control de su localización vía GPS, el aviso en caso de movimientos no autorizados o accidentes, y la recuperación en caso de robo, entre otros.

Por otro lado, y como una de las aplicaciones más usadas de la telemática, se encuentra la gestión de flotas de vehículos. Una aplicación que, en muchos casos, se piensa que hace referencia únicamente a su localización GPS, algo que ni siquiera se aproxima a su potencial real.

Pues con los datos que ofrece la telemática se puede determinar si los vehículos han excedido la velocidad, comprobar los tiempos muertos o enviar alertas casi en tiempo real a los conductores para mostrarles la ruta más rápida.

También se puede llevar un control del consumo de combustible, del comportamiento individual de cada conductor, del tiempo empleado en un lugar específico o fuera de él o de la necesidad de mantenimiento de un vehículo.

A nivel empresarial, también permite recoger datos, procesarlos, personalizarlos y generar la información que el cliente necesita. Información que permitirá crear nuevos servicios y generar nuevas oportunidades de negocio.

Ya sean servicios de soporte, seguridad, protección o localización, lo que está claro es que el uso de la telemática está creciendo, además de en España, en todo el mundo.

El futuro de la telemática

La telemática, sin duda, experimentará un crecimiento exponencial debido al desarrollo de nuevas aplicaciones que aprovechan las unidades GPS y el uso de dispositivos móviles.

Y es que cada vez son más las empresas que reconocen la necesidad de monitorizar la actividad de la flota para tener un mejor control de los costes, aumentar la productividad, rendir cuentas con mayor exactitud y cumplir con las regulaciones gubernamentales.

Las empresas quieren ir más allá de las necesidades básicas para lograr integraciones crecientes, incluyendo la gestión de la fuerza de trabajo móvil, el software ERP y el software de gestión empresarial, que incrementará la ingeniería telemática y se convertirá en un componente integral de todas las operaciones de la flota.

En Viasat Telematics conocemos la importancia que representa hoy en día el contar con sistemas de seguridad inteligentes que nos permitan el rastreo de actividades y anomalías, por lo que ofrecemos a nuestros clientes las mejores soluciones en cuanto a telemática.

Así, lo hacemos con soluciones adaptadas a las necesidades de cada empresa o particular como Fleet & Waste, que permite controlar y gestionar flotas de vehículos y camiones en tiempo real a través de la app móvil o web; Smart Connect, que permite localizar, proteger y recuperar vehículos robados y mejorar procesos en concesionarios; e IoT Solutions, que aprovecha la telemática para mejorar los procesos empresariales, recogiendo datos y generando información.

Ponte en contacto con nosotros y solicita información, ¡resolveremos todas tus dudas!

Post a Comment