在部署SILVERLIGHT站点时,需要能够修改WCF服务的地址,在网上搜索了多篇文章,程序改造成功。过程总结如下
1.在WEB.CONFIG中添加配置节点
<
appSettings
>
< add key ="WCFServiceAddress" value ="http://192.168.100.107/ProspectTaskWcfService/SilverLight_Service.svc" />
</ appSettings >
< add key ="WCFServiceAddress" value ="http://192.168.100.107/ProspectTaskWcfService/SilverLight_Service.svc" />
</ appSettings >
2.在host Silverilght 的aspx页面中添加<param name="initParams" vaule=""/>,添加完成后,如下所示:
<
param
name
="source"
value
="ClientBin/Jurassic.ProspectTask.Web.Control.WorkPlan.xap"
/>
< param name ="onerror" value ="onSilverlightError" />
< param name ="background" value ="white" />
< param name ="minRuntimeVersion" value ="3.0.40624.0" />
< param name ="autoUpgrade" value ="true" />
< param name ="initParams" value ="wcfServiceUrl=<%=ConfigurationManager.AppSettings[" WCFServiceAddress"] % > " />
< param name ="onerror" value ="onSilverlightError" />
< param name ="background" value ="white" />
< param name ="minRuntimeVersion" value ="3.0.40624.0" />
< param name ="autoUpgrade" value ="true" />
< param name ="initParams" value ="wcfServiceUrl=<%=ConfigurationManager.AppSettings[" WCFServiceAddress"] % > " />
我们要是想给SILVERLIGHT传点别的什么东西,也可以用这种方式,下边是传多个参数的例子
<param name="initParams" value="wcfServiceUrl=<%=ConfigurationManager.AppSettings["WCFServiceAddress"] %>,webSiteUrl=<%=ConfigurationManager.AppSettings["WebSite"] %> " />
3.在SilverLight工程下App.xmal.cs中,添加属性CustomConfigurations,并修改事件Application_Startup。如下所示
private IDictionary<string, string> _customConfigurations;
public IDictionary<string, string> CustomConfigurations
{
get { return _customConfigurations; }
}
public App()
{
this.Startup += this.Application_Startup;
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}
private void Application_Startup(object sender, StartupEventArgs e)
{
_customConfigurations = e.InitParams;
this.RootVisual = new MainPage();
}
4.在SilverLight工程中添加一个新CLASS,用于返回一个连接的实例
public class WcfService
{
public WcfService()
{
}
public SilverService.SilverLightClient GetWCF()
{
App application = (App)Application.Current;
string url = application.CustomConfigurations["wcfServiceUrl"];
BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
binding.MaxReceivedMessageSize = int.MaxValue;
binding.MaxBufferSize = int.MaxValue;
//
SilverService.SilverLightClient client = new SilverService.SilverLightClient(binding, new EndpointAddress(new Uri(url)));
return client;
}
}
在我们需要调用WCF服务时,就可通过上边的方法获取实例了
WcfService wcf = new WcfService();
SilverService.SilverLightClient client = wcf.GetWCF();
client.UpdatePlanCompleted += new EventHandler<System.ComponentModel.AsyncCompletedEventArgs>(OnCompleted);
client.UpdatePlanAsync(_planEntity);