Important change to Sockets in Silverlight 2| Comments
- | Posted in
An important note for those using Sockets in Silverlight 2. In beta 1, Sockets were limited to site-of-origin (meaning you could only connect back to the same host that served up the Silverlight application). This has changed in beta 2 to allow your Silverlight application to connect to any server exposing some Socket connections.
One important note, however, is that a policy implementation has been added. This policy implementation affects not only cross-domain Socket calls, but site-of-origin ones as well. So if you are using Sockets, you must have a policy implementation in place.
The policy implementation is done via a similar file mechanism as HTTP-based cross-domain requests. The policy file looks similar and here is a basic example:
<?xml version="1.0" encoding ="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from> <domain uri="file:///" /> </allow-from> <grant-to> <socket-resource port="4502-4506" protocol="tcp" /> </grant-to> </policy> </cross-domain-access> </access-policy>Notice how you can restrict the ports here (note: Sockets in general in Silverlight are limited to ports 4502-4534).
This policy information must be made available on a TCP port request on port 943. Any Socket request will first look for that policy information to respond on this port 934 request. If successful, the remaining communication will be allowed. If not, the communication will fail.
UPDATE: I accidentally typed "934" originally as the port -- it is 943.
There is no code change you need to have in your current Socket implementation other than implementing a Socket policy server to respond to the policy request. I’ll be covering the basics of sockets on a video over on the Silverlight community site which will demonstrate and provide code on doing this implementation. Stay tuned for that one.
Hope this helps.
Please enjoy some of these other recent posts...