Ключевая проблема на самом деле - открытие сокета на стороне клиента для приема подключений от другого компьютера, и Silverlight не поддерживает это даже в режиме вне браузера и даже в Silverlight 4. Если вы хотите что-то сделать таким образом, как уже упоминали другие люди, вам нужен общий сервер, к которому могут подключиться оба клиента и который будет передавать сообщения между клиентами и обратно. И, конечно, тот факт, что сокеты Silverlight ограничены портами 4502-4532, также означает, что вы несколько ограничены политиками брандмауэра.
Что мы сделали с нашими приложениями (используя Silverlight 4), так это попытались соединиться с новой поддержкой Net.TCP (которая значительно лучше масштабируется), а затем, если это не удалось, выполнить откат к HttpDuplexBinding (который работает поверх HTTP и, следовательно, более вероятно, сделать это через брандмауэр). Затем мы написали службу WCF, которая получает сообщения от одного клиента и отправляет их другим подписавшимся клиентам. Это не P2P, но он позволяет получить аналогичный результат (не считая всех реальных преимуществ P2P-соединений).
Если вы переходите на WPF, вы, конечно, разочаровываетесь в переносимости Silverlight, но получаете полную поддержку сокетов сервера, а также возможность кодировать различные стратегии обхода NAT , например, STUN. и ОБОРОТ .