using System; using System.ServiceModel; using System.ServiceModel.Channels; using System.Windows; using EGS.KeyGen.QueryService; namespace EGS.KeyGen { internal class DynamicServiceClient { internal static QueryServiceSoapClient GetClient() { BasicHttpSecurityMode securityMode = Application.Current.Host.Source.Scheme.Equals("https") ? BasicHttpSecurityMode.Transport : BasicHttpSecurityMode.None; BasicHttpBinding binding = new BasicHttpBinding(securityMode); binding.MaxReceivedMessageSize = int.MaxValue; binding.MaxBufferSize = int.MaxValue; return new QueryServiceSoapClient(binding, new EndpointAddress(new Uri(App.ServiceUrl))); } } }
When a function wants to retrieve data, it no longer creates a SOAP client itself, but asks one from this class. The dynamic URI is a static property I defined in the App class that takes it's value from the init params on the Silverlight host page:
<param name="initParams" value="ServiceUrl=http://www.EGS.be/QueryService.asmx" />and sets it like so:
private void Application_Startup(object sender, StartupEventArgs e) { if (e.InitParams.ContainsKey("ServiceUrl")) ServiceUrl = e.InitParams["ServiceUrl"]; ...
And this way I can change the web service end point without having to rebuild the Silverlight application, even though the application still has a static end point from when the service reference was created.
No comments:
Post a Comment