2010-08-04 41 views
0

我需要部署一個Silverlight 4 soltution,它將消耗WCF服務中的數據。我們面臨的挑戰是這將是一次生產安裝,因此我無法控制服務的服務器名稱,並且Silverlight應用程序不會與WCF安裝在同一臺服務器上。如何在Silverlight中動態設置wcf服務的服務器名稱

開始到這裏這條路是我想出迄今:

我將不得不通過initParams在以德WCF的服務器名稱傳遞給我的silverligth應用程序。

ASPX文件內我有

<param name="initparams" value="servicepoint=http://myservice" /> 

那麼app.xaml.cs 內我打電話帕拉姆:

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     this.RootVisual = new MainPage(e.InitParams); //pass parameter from html direclty to main page 

    } 

我叫這個應用程序的啓動中,因此paramater將是整個應用程序的範圍。

現在主要頁面內我這個PARAM分配給一個變量

dswconnection = initParams["servicepoint"];

,然後每當我詢問我設置的地址重寫什麼是服務refernece.config文件中默認的服務

QueryClient selAct = new QueryClient("BasicHttpBinding_IQuery"); 
      selAct.Endpoint.Address = new System.ServiceModel.EndpointAddress(dswconnection); 

我的問題是....這是最好的方法,或者有另一種方法來動態識別服務器的名稱,當你不知道服務器名稱可能是什麼。這是關鍵點,我無法使用某些功能來檢測channelfactory中的主機名或地址,因爲silverlight應用將駐留在與WCF不同的主機上。

現在傳遞給initparams的值被存儲在一個配置文件中,該配置文件被javascript讀取,然後被分配爲值。在我的代碼中,爲了簡潔,我對它進行了嚴格編碼。

感謝您的任何建議。

回答

0

經過一些更多的研究後,在sl應用程序要安裝在不同的服務器上的情況下,或者如果需要使其指向不同的WCF端點,上述方法對此項目來說效果最好。我們結束了將endpoin的全限定服務器名稱與其他連接字符串一起存儲在web.config文件中。然後使用JSON將此值傳遞給init參數。然後,Silverlight能夠在初始階段挑選新的服務器名稱,並將SL應用指向新服務。

0

我所做的是用zip打開xap文件,然後手動更新結束點servicereference.clientconfig文件,然後回拉。

+0

感謝Fresky,我們面臨的挑戰是這個應用程序需要部署到多個站點。在安裝時我們不想手動編輯每個xap文件,而是希望沿着配置文件的路線行走更多的東西,其中可以在安裝時配置服務器名稱,也可以在isntall之後手動觸摸每個xap文件。 – rlcrews 2010-08-16 14:21:10