I started Mox as a WPF project. I can provide a nice and rich user experience. But lately, I’ve been thinking into switching to Silverlight, another Microsoft-driven technology that is a bit like Flash, in that it runs on the client but through a browser. The main advantage of Silverlight is that it is portable. It works on Mac, Linux and probably even some phones. That is the big selling point for me (WPF is limited to Windows). Silverlight also has the rich user experience that WPF has and has out-of-the-box auto-updating which means clients are always up-to-date.
However, I found out some problems that are making the decision difficult for me. In particular, Silverlight is meant to be a client-only sand-boxed application. For example, it doesn’t allow the opening of TCP ports for listening on the client machine. That means that you cannot have a server-client architecture purely in Silverlight (which is common for multiplayer games). The workaround involves having an actual hosted server to which all Silverlight clients talk to. In addition to adding some latency (especially if both players are far from that server), it would require me to host one/many server(s) that can handle all the players (hopefully a lot!). Of course, in all cases, I need a server for matchmaking, but this is lightweight. I was counting on one of the player to act as the server (or have user-run dedicated servers).
On the upside, as far as I know, normal Silverlight networking involves using the browser’s HTTP stack, which solves NAT traversal problems (going through firewalls). However, I think that .Net 4 introduced this also for lower-level TCP communication so that might not be a real issue.
What do you think?