2010-08-26 54 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)。

您顯然需要一個不會改變的根服務。這將爲每個用戶提供端點(否則,端點將需要創建並存儲在客戶端應用程序中的用戶設置)。

相關問題