24 novembre 2009

Détecter une perte du serveur avec la classe Socket

Lors d'une connexion NetTcpBinding à un serveur WCF, il n'y a pas de moyen de savoir immédiatement si la connexion avec le serveur est perdue. La seule manière, c'est d'englober les appels de méthode sur le proxy par des try ... catch. Non seulement ce n'est pas élégant, mais quid si je veux instantanément griser l'interface utilisateur lorsque la communication avec le serveur n'est pas possible?

Je précise que je suis en Framework 2.0 ou 3.5. En Silverlight OOB, on a un événement pour gérer la connexion/déconnexion.

TCP établissant un lien permanent entre le client et le serveur, on peut être prévenu dès que ce lien tombe. Malheureusement il n'y a pas d'événement pour ça sur les classes Socket ou TcpClient. Voici en cadeau une classe qui déclenche un événement dès que le serveur ou la connexion tombent:
public class ClientLinkDetector
{
public event EventHandler ConnectionLost;

public ClientLinkDetector()
{
ConnectToServer();
}

SocketError receiveError;

private void ConnectToServer()
{
IPEndPoint serverIp = new IPEndPoint(IPAddress.Any, 1256);
Socket s = new Socket(serverIp.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

s.Connect("ici l'adresse IP du serveur", 1256);

byte[] buffer = new byte[100];
s.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, out receiveError, RemovePassiveSocketCallback, s);
}

private void RemovePassiveSocketCallback(IAsyncResult result)
{
Socket socket = (Socket)result.AsyncState;
OnConnectionLost();
}

protected virtual void OnConnectionLost()
{
if (ConnectionLost != null)
{
ConnectionLost(this, EventArgs.Empty);
}
}
}

18 novembre 2009

Silverlight 4 est là, Windows Azure arrive

LogoSilverlight C’est l’une des annonces de la PDC aujourd’hui. Silverlight 4 est disponible en version Beta. Et accrochez-vous, il y a du bon, du solide, du très attendu:

  • prise en charge de l’impression (YES!!!)
  • prise en charge de la WebCam et du microphone

mais aussi des features que l’on pouvait attendre car elles sont dans WPF depuis le début:

  • styles implicites
  • commandes (pour faire du MVVM notamment)
  • une vue design utilisable dans Visual Studio 2010

et enfin des OVNI

  • applications OOB en confiance totale (full trust) (WPF risque d’en mourir)
  • partage d’assemblies entre du .NET Framework et Silverlight (ça évitera les magouilles)

D’autres annonces dans la foulée:

La bonne nouvelle dans le lot, c’est donc que RIA Services est une technologie pérenne, ce que rien ne garantissait jusque là. Et comme .NET WCF RIA Services c’est un superbe outil pour développer des applications de gestion Silverlight connectées aux données, ça me fait bien plaisir.

14 novembre 2009

Demonstration Silverlight LOB 3D

Pour ma démonstration de mardi chez Microsoft, je vais créer en 30 minutes et sous vos yeux l’application Silverlight décrite ci-dessous. N’hésitez pas à venir, la conférence est gratuite et il y aura d’autres sessions intéressantes.

Si vous voulez faire tourner l’application, elle est en ligne ici. En voici quelques copies d’écran:

image image image image

Comme vous pouvez le voir, il s’agit d’une application LOB médicale. Pour passer du mode “Détails” au mode “Modifier”, on a un effet de rotation du panneau principal en 3D. La liste des patients tourne aussi en 3D pour se coller sur le côté et prendre moins de place.

Quelques détails intéressants:

  • a tout moment, on peut cliquer sur un nouveau patient dans la liste pour voir ses détails ou le modifier, même lorsque la liste est sur le côté;
  • toute modification du nom ou de l’âge est immédiatement répercutée dans la liste de gauche;
  • les données proviennent d’une vraie classe métier écrite en C#;
  • l’application est redimensionnable.

Alors rendez-vous mardi 17 novembre à 17h.