Conexión de red

Usa una implementación más sencilla de HTTP para todos los lenguajes admitidos, una comunicación de red más fácil para tu aplicación y nuevas API para escenarios móviles basados en la ubicación para desarrollar aplicaciones conectadas versátiles.

Novedades o actualizaciones de Windows 8.1

  • Nueva API de cliente HTTP
  • Filtros de solicitudes HTTP personalizados
  • Actualizaciones de transferencia en segundo plano
  • Actualizaciones de comunicación en tiempo real
  • Actualizaciones de modo de espera conectado
  • Compatibilidad con la geovalla
  • Wi-Fi Direct

Nueva API de cliente HTTP

[Obtén la muestra de HTTPClient ahora.]

Windows 8.1 presenta Windows.Web.Http, el espacio de nombres de Windows en tiempo de ejecución que utilizas para las aplicaciones de Windows que se conectan a servicios web HTTP y REST. Esta nueva API proporciona compatibilidad con todas las características en todos los lenguajes admitidos y reemplaza la API de HTTP original de Windows 8.

En las operaciones de solicitud básicas, la nueva API tiene una interfaz sencilla para administrar la tareas más comunes y proporciona valores predeterminados razonables para autenticación (AUTH) que se aplican a la mayoría de los escenarios. En las operaciones HTTP más complejas, se ofrecen funcionalidades adicionales como las siguientes:

  • Métodos para verbos comunes (DELETE, GET, PUT y POST)

  • Capacidad de obtener, establecer y eliminar cookies

  • Compatibilidad con diseños y configuraciones de autenticación comunes

  • Información de progreso de solicitudes HTTP disponible en métodos asincrónicos

  • Acceso a detalles de la Capa de sockets seguros (SSL) en el transporte

  • Capacidad de incluir filtros personalizados en aplicaciones avanzadas

El espacio de nombres Windows.Web.Http.Headers admite la creación de cookies y encabezados HTTP, que se asocian como propiedades a objetos HttpRequestMessage y HttpResponseMessage.

Aquí tienes código de ejemplo que muestra cómo usar la nueva API para crear una solicitud GET HTTP básica de contenido en un servidor web que se devuelve como una cadena.

var uri = new Uri("http://example.com/datalist.aspx");
var httpClient = new HttpClient();

// Always catch network exceptions for async methods.
    httpClient.GetStringAsync (uri).done(function () {
            // Get completed operation.
       }, onError);


function onError(reason) {
    // Details in reason.Message and ex.HResult.       
}

// Once your app is done using the HttpClient object call close to 
// free up system resources (the underlying socket and memory used for the object)
// httpClient.close();
using System;
using Windows.Foundation;
using Windows.Web.Http;

var uri = new Uri("http://example.com/datalist.aspx");
var httpClient = new HttpClient();

// Always catch network exceptions for async methods.
try 
{
    var result = await httpClient.GetStringAsync (uri);
}
catch 
{
    // Details in ex.Message and ex.HResult.       
}

// Once your app is done using the HttpClient object call dispose to 
// free up system resources (the underlying socket and memory used for the object)
httpclient.Dispose();
using namespace Windows::Foundation;
using namespace Windows::Web::Http;

uri = ref new Uri("http://example.com/datalist.aspx");
httpClient = ref new HttpClient();

// Always network exceptions for async methods.
try 
{
    httpClient->GetStringAsync (uri);
}
catch 
{
    // Details in ex.Message and ex.HResult.       
}

// In C++ and CX, the system resources used by httpClient object are released 
// when the object falls out of scope or by the destructor (delete operator)

Filtros de solicitudes HTTP personalizados

Con el modelo de filtro de solicitud web que admite el nuevo espacio de nombres Windows.Web.Http.Filters, es más sencillo que nunca realizar solicitudes web adecuadas a escenarios de seguridad y conectividad específicos, como:

  • Administración de la autenticación

  • Restricción del acceso en redes de uso medido

  • Usar reintentos automáticos tras errores de conexión

  • Compatibilidad con técnicas de programación modernas como la creación de objetos ficticios

Normalmente no resulta difícil administrar una sola red o condición de seguridad que esperes durante una solicitud, pero administrar muchas de ellas puede suponer un desafío. Puedes usar esta nueva API para crear varios filtros sencillos y luego encadenarlos como sea necesario. De este modo, puedes desarrollar funcionalidades de solicitudes web para la complejidad esperada sin tener que desarrollar algo que tenga la misma complejidad.

HttpClient es la clase principal que usas para enviar y recibir solicitudes a través de HTTP. Usa la clase HttpBaseProtocolFilter para determinar cómo enviar y recibir los datos. Por eso, HttpBaseProtocolFilter es lógicamente el fin de cualquier cadena de filtros personalizados. Cada instancia de HttpClient puede tener una canalización o cadena de filtros distinta, como se muestra a continuación.

Dibujo de una cadena de filtros HTTP

Para escribir un filtro personalizado, debes crear una versión personalizada de la interfaz de IHttpFilter. Usa el método IHttpFilter.SendRequestAsync para especificar cómo funciona el filtro. Puedes usar C#, Visual Basic .NET o C++ para escribir un filtro. Estos filtros pueden llamarse y usarse desde cualquier lenguaje compatible con Windows en tiempo de ejecución.

Aquí tienes código de ejemplo de un filtro que agrega un encabezado personalizado a solicitudes y respuestas HTTP.

// A filter that adds a custom header to every Http request and response
public class PlugInFilter : IHttpFilter {
    private IHttpFilter innerFilter;

    public PlugInFilter(IHttpFilter innerFilter) {
        if (innerFilter == null) {
            throw new ArgumentException("innerFilter cannot be null.");
        }
        this.innerFilter = innerFilter;
    }

    // The SendRequest method where we add the custom headers
    public IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request) {
        return AsyncInfo.Run<HttpResponseMessage, HttpProgress>(async (cancellationToken, progress) =>
        {
            request.Headers.Add("Custom-Header", "CustomRequestValue");
            HttpResponseMessage response = await innerFilter.SendRequestAsync(request).AsTask(cancellationToken, progress);

            cancellationToken.ThrowIfCancellationRequested();

            response.Headers.Add("Custom-Header", "CustomResponseValue");
        return response;
        });
    }

    public void Dispose() {
        innerFilter.Dispose();
        GC.SuppressFinalize(this);
    }
}

Para usar este filtro, pasa su interfaz al constructor HttpClient(IHttpFilter) cuando crees un nuevo objeto HttpClient. Para configurar una cadena de filtros, vincula el nuevo filtro a un filtro anterior y a un objeto HttpBaseProtocolFilter al final.

Este código de ejemplo muestra cómo crear un objeto HttpClient y encadenarlo a un único filtro personalizado.

internal static void CreateHttpClient(ref HttpClient httpClient)
{
    if (httpClient != null) {
        httpClient.Dispose();
    }

    // Extend HttpClient by chaining filters together
    // and then providing HttpClient with the configured filter pipeline.
    var basefilter = new HttpBaseProtocolFilter();

    // Adds a custom header to every request and response message.
    var myfilter = new PlugInFilter(basefilter);
    httpClient = new HttpClient(myfilter);

}

Actualizaciones de transferencia en segundo plano

[Obtén la muestra de transferencia en segundo plano ahora.]

Windows 8.1 presenta actualizaciones de Windows.Networking.BackgroundTransfer que simplifican todavía más las descargas y las cargas para los desarrolladores, lo que mejora la experiencia de los usuarios finales.

  • La nueva clase BackgroundTransferGroup permite que la aplicación pueda crear fácilmente estos grupos y complete las descargas y las cargas en paralelo, en serie o según la prioridad. Por ejemplo, cuando un usuario decide descargar y ver episodios de series de televisión populares, tu aplicación ahora puede dar prioridad a los episodios más antiguos de la serie o permitir que el usuario elija el episodio que quiere descargar en primer lugar.

  • Tu aplicación puede ahora actualizar su icono dinámico o usar notificaciones del sistema para proporcionar información de estado al usuario. Puedes configurar estas notificaciones usando los nuevos métodos en las clases BackgroundDownloader y BackgroundUploader.

  • La transferencia en segundo plano ahora cambia automáticamente una descarga a una red preferida (por ejemplo, una red no restringida) si la descarga puede reanudarse y es posible que tarde más de dos minutos.

Compatibilidad con la comunicación en tiempo real en escenarios de modo de espera conectado

[Obtén la muestra de comunicación en tiempo real ahora.]

La conexión de red en segundo plano ahora permite a las aplicaciones de la pantalla de bloqueo de Windows recibir paquetes de red incluso si la aplicación ya no se está ejecutando porque el dispositivo está en estado de bajo consumo, como el modo de espera conectado. Las actualizaciones incluyen:

  • Compatibilidad con comunicaciones en tiempo real para la nueva API Windows.Web.Http.

  • Compatibilidad con el período sin notificaciones, una nueva característica de Windows 8.1.

  • Una nueva notificación para aplicaciones de voz sobre IP (VoIP) que les permite responder llamadas incluso mientras la pantalla está bloqueada.

  • Cuatro ranuras de hardware para admitir el modo de espera conectado en la mayoría de los dispositivos de red (las ranuras de software más comunes no admiten el modo de espera conectado).

Actualizaciones de modo de espera conectado

El modo de espera conectado es un estado de energía especial en dispositivos Windows. Permite a las aplicaciones realizar tareas de conectividad limitada mientras la pantalla del dispositivo está apagada y el dispositivo se encuentra en espera (bajo consumo). Las comunicaciones en tiempo real y la conexión de red en segundo plano usan el modo de espera conectado únicamente cuando el adaptador de red del dispositivo lo admite.

Windows 8.1 presenta estas actualizaciones del modo de espera conectado, de modo que tus aplicaciones pueden ofrecer una experiencia de conexión que responde adecuadamente en todo el ciclo de vida de un dispositivo:

  • Se agregó compatibilidad para adaptadores de red de banda ancha móvil y Ethernet (ya se admitían adaptadores Wi-Fi).

  • Compatibilidad con más ranuras de hardware para algunos adaptadores de red que las ofrecen (un mayor número de ranuras permite que más aplicaciones de la pantalla de bloqueo puedan usar el modo de espera conectado). Las tres primeras aplicaciones de la pantalla de bloqueo que se registren para una ranura de hardware pueden usar un máximo de tres ranuras de hardware por aplicación.

Compatibilidad con la geovalla

[Obtén la muestra de ubicación geográfica ahora.]

Windows 8.1 presenta compatibilidad con la geovalla. La geovalla permite que una aplicación pueda definir un radio alrededor de un punto de interés geográfico, de modo que el sistema alerte a la aplicación cuando el dispositivo en el que se está ejecutando entre o salga de dicha área. Con esta actualización de la característica de ubicación geográfica de Windows, tu aplicación puede notificar a un usuario cuando hay amigos cerca, enviar un recordatorio a un usuario que sale del trabajo o de casa, o mostrar cupones cuando el usuario está cerca de determinadas tiendas.

Con las funcionalidades de la geovalla en Windows 8.1, puedes:

  • Crear o quitar una o más geovallas o áreas de interés.

  • Configurar que se genere una notificación cuando se entre o salga de una geovalla.

  • Permitir que la aplicación de geovalla se ejecute en segundo plano y seguir obteniendo eventos de geovalla mediante la clase LocationTrigger de la nueva tarea en segundo plano.

  • Permitir que tu aplicación reciba actualizaciones de geovalla mientras se encuentra en la pantalla de bloqueo.

El espacio de nombres Windows.Devices.Geolocation.Geofencing contiene las clases que necesitas para la geovalla. En general, creas uno o varios objetos Geofence que definen las áreas de interés y las condiciones de notificación. Tu aplicación debe entonces administrar los eventos que se generan cuando el dispositivo entra o sale de una de las áreas definidas. A continuación, puedes probar tu aplicación con un simulador, con el fin de simular el movimiento de entrada y salida de la geovalla.

Compatibilidad con Wi-Fi Direct

[Obtén la muestra de dispositivo Wi-Fi Direct ahora.]

Puedes usar la nueva clase WiFiDirectDevice para enumerar una lista de dispositivos Wi-Fi Direct que se encuentran dentro del alcance inalámbrico. Estos dispositivos se asocian a tu PC mediante "Agregar un dispositivo" en la sección Dispositivos de la configuración de usuario. Tu aplicación puede entonces crear una conexión de socket de red con cualquier dispositivo Wi-Fi Direct próximo. Wi-Fi Direct es una nueva característica que permite a los dispositivos Wi-Fi conectarse fácilmente entre sí sin necesidad de un punto de acceso inalámbrico. Es ideal para compartir multimedia o para los juegos conectados de alto rendimiento. Para obtener más información, consulta el espacio de nombres Windows.Devices.WifiDirect en la API de Windows en tiempo de ejecución.

Nota  Debes habilitar la funcionalidad Proximidad en el archivo de manifiesto de tu aplicación para poder usar la API de Wi-Fi Direct.