Manipulating Service References in Silverlight 2
When developing a Silverlight 2 project that uses WCF service references or ADO.NET Data Services Astoria references, and you want to push the builds to a test server, there are a few changes that need to be made so the references point to the test server and not the dev box.
Shawn Wildermuth has a great post on this topic that explains the problem and also explains that when dealing with WCF service references, the ServiceReference.ClientConfig file can either be simply edited or a better option is to use compilation symbols to make the changes at compile time. For example, Shawn points out that you can create 2 endpoints in code in the ServiceReference.ClientConfig file in the Silverlight project: 1 for dev box and 1 for the test server. Then, in code the service can be instantiated using the following code (from Shawn’s post):
#if DEBUG MyTestServiceClient svc = new MyTestServiceClient("TestEndpoint"); #else MyTestServiceClient svc = new MyTestServiceClient("RealEndpoint"); #endif
This same technique can be adapted for Astoria by flipping the service reference’s context object’s instantiation as shown below:
#if DEBUG protected MyEntities Context { get { if (_context == null) _context = new MyEntities( new Uri("MyService.svc", UriKind.Relative)); return _context; } } #else protected MyEntities Context { get { if (_context == null) _context = new MyEntities( new Uri("http://testbox/foo/MyService.svc", UriKind. Absolute)); return _context; } #endif
Now simply choose the compilation options for when building and you are all set! Quite simple and effective.