Την προηγούμενη εβδομάδα βρισκόμουν στο Βερολίνο και παρακολουθούσα την Teched. Μέσα σε όλα τα υπόλοιπα είδα και ένα session αφιερωμένο στο Silverlight 3. Σε αυτό λοιπόν παρουσιάστηκε και ένα νέο feature του Silverlight με το όνομα Local Messaging.
Όταν το είδα μου πέρασε η εξής ιδέα από το μυαλό: Μπορεί να χρησιμοποιηθεί ώστε να επιτρέπει σε ένα χρήστη να έχει ανοιχτό μόνο ένα tab από ολόκληρο το website?
Η απάντηση είναι ΝΑΙ! Ίσως με έναν περίεργο τρόπο που μπορεί να χαρακτηριστεί ως coding by coincidence. Ορίστε πως (κώδικας στο MainPage.xaml.cs):
string _localName = "SL App";
bool _Close = false;
public MainPage()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainPage_Loaded);
try
{
LocalMessageReceiver incomingMessage = new LocalMessageReceiver(_localName);
//Start listening
incomingMessage.Listen();
}
catch (ListenFailedException)
{
_Close = true;
}
}
protected void MainPage_Loaded(object sender, RoutedEventArgs e)
{
if (_Close)
{
HtmlPage.Window.SetProperty("location", "/InfoMessage.aspx");
}
else
{
LocalMessageSender msgSender = new LocalMessageSender(_localName);
msgSender.SendAsync("New instance loaded");
}
}
Η σελίδα Default.aspx

Επιλέγοντας το 1ο link…

Στη συνέχεια επιλέγουμε το 2ο link

Τα αρχεία που περιλαμβάνονται στο solution
Αυτό αποτελεί μια exception driven λύση! :)
Το παραπάνω λειτουργεί και για διαφορετικούς browsers. π.χ. Το μήνυμα βγαίνει στον χρήστη ακόμα και αν δοκιμάσει να ανοίξει διαφορετικό browser ταυτόχρονα με τον αρχικό.
Εδώ μπορείτε να κατεβάσετε τον κώδικα.
Enjoy!