2010-08-26 60 views
0

我正在开发一个与WCF服务通信的silverlight 4.0应用程序。是否有可能让网站提供WCF配置到Silverlight应用程序?

WCF配置(endpoint,...)包含在ServiceReferences.ClientConfig文件中。

但是,我希望Silverlight应用程序从Web服务器获取此配置,因为我不想重新编译应用程序或者使用XAP文件(我知道它是一个zip文件),因为只允许用户配置Web服务器,并且此配置将在每个服务器/站点上有所不同。

Silverlight应用程序是否有办法从Web服务器接收某种信息或从中获取此类数据?

回答

0

好吧,经过大量搜索网络后,我能够通过汇总我找到的不同信息来编写以下解决方案。

首先,Silverlight 4(如SL3)使用不同的机制在客户端的网页中创建Silverlight控件。它使用< object>标记。

要传递初始化参数,你只需要

<param name="initParams" value="key1=value1,key2=value2" /> 

添加到page.aspx文件(从Web项目)对象标记下和SL应用程序将在收到这些2个参数Silverlight应用程序启动。

例如,使用从VS2010生成的默认aspx页面:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 
    <param name="source" value="ClientBin/MyApp.xap"/> 
    <param name="onError" value="onSilverlightError" /> 
    <param name="background" value="white" /> 
    <param name="minRuntimeVersion" value="4.0.50401.0" /> 
    <param name="autoUpgrade" value="true" /> 
    <param name="initParams" value="key1=value1,key2=value2" /> 
    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none"> 
     <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/> 
    </a> 
</object> 

要访问SL应用程序的参数,你只需要编写在App.xaml.cs文件中的以下内容:

private void Application_Startup(object sender, StartupEventArgs e) 
{ 
    var builder = new StringBuilder(); 

    foreach (String key in e.InitParams.Keys) 
     builder.AppendFormat ("from InitParams: {0} = {1}", 
           key, e.InitParams[key]).AppendLine(); 

    HtmlPage.Window.Alert (builder.ToString()); 

    // Other code... 
} 

现在,这只允许参数的静态值。 要具有动态值,你只需要在initParam行更改为:

<param name="initParams" value="<%= string.Format("WCFReferenceURL={0}", ConfigurationManager.AppSettings["WCFReferenceURL"])%>" /> 

从Web服务器上的配置文件中获取值。 ;)

我希望这有助于一些可怜的灵魂在那里!

0

您当然可以覆盖该端点。您可以在创建服务主机对象以使用服务时指定新端点(see this link)。

您显然需要一个不会改变的根服务。这将为每个用户提供端点(否则,端点将需要创建并存储在客户端应用程序中的用户设置)。

相关问题