Programación para redes en .NET Compact Framework

Actualización: noviembre 2007

.NET Compact Framework proporciona compatibilidad integrada con servicios Web XML, así como con las siguientes funcionalidades del protocolo:

  • Controles basados en HTTP.

  • Autenticación de NTLM.

  • Contenidos XML codificados en SOAP. Esta compatibilidad incluye la transferencia de conjuntos de datos ADO.NET.

  • Métodos de peticiones Web y respuestas Web que pueden enviar mensajes HTTP SOAP y recibir en respuesta mensajes SOAP.

  • Bibliotecas y métodos SOAP que puedan serializar y deserializar llamadas a métodos y objetos arbitrarios en mensajes XML SOAP y desde éstos.

Solicitudes HTTP

Los elementos siguientes se refieren a enviar y recibir solicitudes HTTP:

  • Cuando utilice el emulador, no use localhost como nombre de servidor. Especifique el nombre de equipo o la dirección IP del equipo de desarrollo que aloja el servicio Web.

    El emulador, como los dispositivos, tiene su propia dirección IP. El uso de localhost indica al emulador que se utilice a sí mismo para conectarse con el servicio Web, en lugar del servicio Web alojado por el equipo de desarrollo u otro equipo de escritorio.

    Por ejemplo, en lugar de:

    https://localhost/myWebService/Service1.asmx

    Especifique lo siguiente:

    http://ComputerName/myWebService/Service1.asmx

  • Cuando realice una solicitud HTTP mediante HttpWebRequest, el dispositivo iniciará una conexión de red nueva, si no estaba establecida antes. Por lo tanto, al realizar una petición de HTTP solamente para averiguar si está disponible una conexión, puede hacer que el dispositivo intente iniciar una conexión, por ejemplo, una conexión GPRS.

  • .NET Compact Framework no almacena información del proxy en la propiedad GlobalProxySelection.Select, pero utiliza esta propiedad para las conexiones HTTP si especifica un valor en el código.

  • Es probable que, para las conexiones con Internet, deba especificar su propia configuración de proxy local. El código siguiente muestra la configuración del proxy para el puerto 80:

    System.Net.GlobalProxySelection.Select = new WebProxy("http://myproxy:80");
    
  • Si establece AllowWriteStreamBuffering en false, los datos no se almacenarán en el búfer y no serán compatibles con las solicitudes de autenticación ni las redirecciones del servidor Web.

  • Para asegurarse de que las operaciones sean satisfactorias, especifique rutas de acceso absolutas.

    Tenga en cuenta el comportamiento de Windows CE siguiente para resolver las especificaciones relativas al archivo:

    file://myfile se resuelve como \\myfile.

    file:///myfile se resuelve como \myfile en el directorio raíz.

  • Es un problema conocido que el método Dns.GetHostName de .NET Framework produce una excepción cuando hay más de 50 protocolos de red instalados en el equipo actual.

    Para evitar este problema, desinstale los protocolos de red que realmente no se necesitan. Una manera de hacerlo es utilizar el Administrador de dispositivos de Windows para quitar los adaptadores de red que no se utilizan. Otra manera es desinstalar aplicaciones que tienen protocolos instalados.

Comunicaciones móviles seguras

Hay dos métodos principales para obtener comunicaciones móviles seguras:

  • Autenticación HTTP

    .NET Compact Framework admite autenticación básica e implícita. Estos mecanismos de autenticación son sencillos y se conoce bastante bien su seguridad y compensaciones, como por ejemplo que el servicio Web se limita a un enlace de HTTP.

    La versión 2.0 de .NET Compact Framework admitirá servidores que ejecuten NTLM o Kerberos (Autenticación Integrada de Windows), lo que no requerirá ningún cambio de código de la autenticación básica o implícita actual.

  • Encabezados de seguridad personalizados

    Actualmente, .NET Compact Framework no admite Seguridad de Servicios Web (WS-Security) ni Mejoras del Servicio Web (WSE).

    Además, ya sea que autentique utilizando HTTP o un encabezado personalizado, puede utilizar SSL para aumentar la seguridad. La autenticación básica pasa el nombre y la contraseña en texto no cifrado, por lo que no es particularmente seguro a menos que se ejecute desde dentro de SSL. Sin embargo, cuando se utiliza junto con SSL, es bastante seguro, con el único problema significativo de que se revelen accidentalmente las credenciales al servidor de destino.

Nota   .NET Compact Framework no admite la autenticación de cliente mediante certificados X509.

Consideraciones acerca de la longitud del contenido

Si envía una petición Web HTTP de contenidos enviados como secuencias de datos mediante el protocolo POST, deberá especificar una longitud para el contenido. Si SendChunked es false y Method = POST, especifique un valor para ContentLength.

A diferencia de .NET Framework completo, .NET Compact Framework no almacena previamente los datos en el búfer por consideraciones de limitaciones de memoria. Para garantizar el almacenamiento en búfer, establezca SendChunked en false.

Una secuencia de solicitudes con longitud de contenido cero produce una ObjectDisposedException si no se obtuvo y se cerró correctamente. Para controlar las solicitudes con longitud de contenido cero, debe llamar explícitamente al método GetRequestStream y, a continuación, llamar al método Close de la secuencia devuelta sin llamar al método Write, tal como se muestra en el ejemplo de código siguiente.

private static void ZeroLengthRequest()
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(
        requestUri + "?dummy=true");
    request.AllowWriteStreamBuffering = true;
    request.Credentials = CredentialCache.DefaultNetworkCredentials;
    request.Credentials = netCred;
    request.ConnectionGroupName = "mygroup";
    request.ContentLength = 0;
    request.KeepAlive = true;
    request.Method = "POST";
    request.ServicePoint.UseNagleAlgorithm = false;
    request.Timeout = System.Threading.Timeout.Infinite;
    request.UnsafeAuthenticatedConnectionSharing = true;
    Stream req = request.GetRequestStream();
    req.Close();
    using (request.GetResponse())
    {
        ...
    }
}
Private Shared Sub ZeroLengthRequest()
        Dim request As HttpWebRequest = _
           CType(WebRequest.Create(requestUri + "?dummy=true"), _
           HttpWebRequest)
        request.AllowWriteStreamBuffering = true
        request.Credentials = CredentialCache.DefaultNetworkCredentials
        request.Credentials = netCred
        request.ConnectionGroupName = "mygroup"
        request.ContentLength = 0
        request.KeepAlive = true
        request.Method = "POST"
        request.ServicePoint.UseNagleAlgorithm = false
        request.Timeout = System.Threading.Timeout.Infinite
        request.UnsafeAuthenticatedConnectionSharing = true
        Dim req As Stream = request.GetRequestStream
        req.Close
        request.GetResponse
End Sub

Vea también

Otros recursos

Funciones de redes y conexión en .NET Compact Framework