V článku zde jsme si ukázali jak nezávisle na konkrétní infrastruktuře nebo typu aplikace sestavovat URL, když známe base URL a k této base relativní URL. Dnes si naopak ukážeme jak sestavovat URL konkrétně v Silverlight aplikaci v případě, že známe app-relativní URL tj. pokud chceme v Silverlightu sestrojit URL zdroje umístěného na webu, který danou aplikaci hostuje.
Webová aplikace, která Silverlight aplikaci hostuje, typicky slouží i k hostování WCF (nebo jiných) služeb, které z této aplikace využíváme. Příkladem, kdy potřebujeme takto sestrojit URL, může být hned právě získání URL na tuto službu.
Pokud například bude naše WCF služba vystavena pomoci souboru (nebo odpovídající routy) Service.svc přímo v kořenovém adresáři webové aplikace a klient bude na Silverlight aplikaci přistupovat například z adresy http://www.contoso.com/WebApplication potřebujeme získat cílové URL http://www.contoso.com/WebApplication/Service.svc.
Pro sestavení tohoto URL využijeme hodnotu vrácenou pomoci vlastnosti Application.Current.Host.Source, která odpovídá URL .xap souboru aktuálně běžící Silverlight aplikace. Tato hodnota bude tedy například:
http://www.contoso.com/WebApplication/ClientBin/WebApplication.xap
Pro vlastní sestavení cílové URL nám pak na rozdíl od minule stačí používat pouze standardní konstruktor třídy Uri, ale s tím, že relativní URL musíme zadávat vzhledem k adresáři ClientBin (tj. kořenu aplikace odpovídá relativní URL “../”).
Sestavení URL bude tedy vypadat takto:
Uri url = new Uri(Application.Current.Host.Source, "../Service.svc");
http://www.contoso.com/WebApplication/Service.svc
Silverlight dále umí ještě získat i URL stránky, která Silverlight aplikaci hostuje. Tuto hodnotu vrací vlastnosti HtmlPage.Document.DocumentUri a může být konkrétně například:
http://www.contoso.com/WebApplication
http://www.contoso.com/WebApplication/
http://www.contoso.com/WebApplication/default.aspx
Podle toho z jaké konkrétní z podporovaných URL klient aplikaci spustil.
Skutečnost, že Silverlight aplikaci zpravidla odpovídá více URL, ale způsobuje použití této hodnoty jako základ pro sestavování URL podle mého názoru zbytečně obtížné a proto preferuji a zároveň doporučuji používat předchozí variantu.
Tato hodnota se ale případně může hodit, pokud naopak chceme, aby byla původní URL zachována (v této URL je také zachován i querystring nebo fragment). Takto můžeme například provést restart celé Silverlight aplikace:
System.Windows.Browser.HtmlPage.Window.Navigate(System.Windows.Browser.HtmlPage.Document.DocumentUri);