23 julio 2004

.NET Compact Framework...

... y la madre que la parió.

Resulta que mi nuevo proyecto, el que llevo desde el lunes, es un testing para convencer a un posible cliente de que las cosas que quiere hacer con una PDA se pueden hacer.

De lo que empiezo a no estar nada seguro.

Nuestro cliente quiere utilizar unas cuantas PDAs como los Los hombres de Harrelson utilizaban los M16: según iban haciendo cola para entrar en la furgoneta, cada cual cogía el que le tocaba. Es decir, que ninguna de las PDAs pertenecería a ninguno de los usuarios, sino que cualquiera de estos podría usar cualquiera de las PDAs.

Cuando uno de los usuarios ha cogido una PDA, debe logarse contra un dominio de red (al que la PDA accede mediante wireless, claro) con su nombre de usuario y contraseña, exactamente igual que haría si estuviera enfrente de su ordenador de sobremesa.

Todo muy bonito, pero choca frontalmente con la filosofía de diseño de una PDA: estos aparatos están pensados para que sean de un sólo usuario. Por lo tanto, en el Panel de Control de Windows CE; bajo la identificación de usuario se encuentra la identificación de red. Se supone que uno cambia estos settings cuando se compra la PDA y no los vuelve a cambiar; o si lo hace es de Pascuas a Ramos.

En resumidas cuentas, que tengo que hacer un pequeño form que permita a una PDA logarse contra un dominio LAN, especificando dominio, usuario y contraseña.

Y no hay manera.

Llevo desde el lunes dándome de cabezazos contra el escritorio (que empieza a combarse) y descubriendo que ni las PDAs ni el .NET Compact Framework están preparados para admitir autenticaciones de red NTLM, ni Kerberos, ni nada. Esto no quiere decir que no se pueda hacer lo que quiero, esto quiere decir que es complicado. En otras palabras, hay que tirar de API mediante llamadas P/Invoke.

Y la API, claro, está pobremente documentada. En este caso, el eufemismo quiere decir que la documentación es una p*ta mierda pinchada en un palo. Con deciros que me he tenido que descargar e instalar el Platform Builder de Microsoft (licencia de 120 días), los más de 700 megas que ocupa; sólo para encontrar un triste fichero (netui.h) y averiguar el valor de ciertas constantes del API.

Y todo esto, para que al final uno haga las llamadas y la única respuesta que recibe es un System.NotSupportedException, que traducido al cristiano estándar viene a ser algo así cómo: "Esta aplicación revienta pero no voy a decirte por qué, jódete y baila".

Me voy a hacer granjero, como Luke.