Reputation: 2174
i am making an application in silverlight.The XAP folder of that application contains ServiceReferencesClientConfig file.I have deployed that application on webserver and whenever i am accessing that website from other machine like (http://192.168.1.15/SampleApplication/Login.aspx)
, I want to write that IP address(192.168.1.15) into ServiceReferencesClientConfig and after that the Xap file should be downloaded to client side. But i am not getting idea of editing the ServiceReferencesClientConfig file by programmatically. (I want to do that change as i change the IP address of webserver on which application is deployed, it should change the ServiceReferencesClientConfig automatically so there is no need to to change ServiceReferencesClientConfig file manually.)
Upvotes: 0
Views: 900
Reputation: 7058
As an option, you can configure your service proxies dinamically, changing the default constructor to use dinamically generated endpoints and bindings, or using a factory to do the same:
public MyService()
: base(ServiceEx.GetBasicHttpBinding(), ServiceEx.GetEndpointAddress<T>())
{
}
public static class ServiceEx
{
private static string hostBase;
public static string HostBase
{
get
{
if (hostBase == null)
{
hostBase = System.Windows.Application.Current.Host.Source.AbsoluteUri;
hostBase = hostBase.Substring(0, hostBase.IndexOf("ClientBin"));
hostBase += "Services/";
}
return hostBase;
}
}
public static EndpointAddress GetEndpointAddress<TServiceContractType>()
{
var contractType = typeof(TServiceContractType);
string serviceName = contractType.Name;
// Remove the 'I' from interface names
if (contractType.IsInterface && serviceName.FirstOrDefault() == 'I')
serviceName = serviceName.Substring(1);
serviceName += ".svc";
return new EndpointAddress(HostBase + serviceName);
}
public static Binding GetBinaryEncodedHttpBinding()
{
// Binary encoded binding
var binding = new CustomBinding(
new BinaryMessageEncodingBindingElement(),
new HttpTransportBindingElement()
{
MaxReceivedMessageSize = int.MaxValue,
MaxBufferSize = int.MaxValue
}
);
SetTimeouts(binding);
return binding;
}
public static Binding GetBasicHttpBinding()
{
var binding = new BasicHttpBinding();
binding.MaxBufferSize = int.MaxValue;
binding.MaxReceivedMessageSize = int.MaxValue;
SetTimeouts(binding);
return binding;
}
}
Upvotes: 1