我需要部署一個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讀取,然後被分配爲值。在我的代碼中,爲了簡潔,我對它進行了嚴格編碼。
感謝您的任何建議。
感謝Fresky,我們面臨的挑戰是這個應用程序需要部署到多個站點。在安裝時我們不想手動編輯每個xap文件,而是希望沿着配置文件的路線行走更多的東西,其中可以在安裝時配置服務器名稱,也可以在isntall之後手動觸摸每個xap文件。 – rlcrews 2010-08-16 14:21:10