Silverlight 3.0 : Ďalšie technologické novinky
Silverlight 3 prináša veľa noviniek aj v oblasti sieťovej komunikácie a webových služieb. K zrýchleniu komunikácie prispeje nový Binary Message Encoder. Umožňuje zmenšiť veľkosť posielaných balíkov. O úspore kapacity pre jednotlivé typy správ svedčí graf na obrázku.
Redukcia veľkosti pre jednotlivé typy správ
Ak v Silverlight aplikácii využívajúcej webovú službu vybudovanej na platforme Silverlight 2 došlo k problému v komunikácii služby, tieto výnimky neboli šírené do Silverlight aplikácie a teda nebolo ich tam možné ošetriť. Prejavili sa len ako nič nehovoriaca všeobecná výnimka CommunicationException. V novej verzii Silverlight 3 sú k dispozícii výnimky FaultException a FaultException<ExceptionDetail> , ktoré nesú podrobné informácie o príčine zlyhania. Výnimky typu WCF error faults sú teraz šírené naprieč celým komunikačným reťazcom vrátane Silverlight 3 aplikácie.
Zjednodušilo sa aj používanie Server-side push duplexu a v novej verzii je k dispozícii aj Binary XML serialization.
Pre vytvorenie klientskej aplikácie využívajúcej WCF Duplex Service je potrebné do klientskej Silverlight aplikácie pridať referenciu na príslušnú službu (kontextové menu Add reference) a vytvoriť Call Back metódy:
using System.Windows.Controls;
using System.ServiceModel;
using System.ServiceModel.Channels;
using SL3DuplexClient.SL3DuplexService;
using System;
namespace SL3DuplexClient
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
EndpointAddress address = new
EndpointAddress("http://localhost:19021/DuplexService.svc");
CustomBinding binding = new CustomBinding(
new PollingDuplexBindingElement(),
new BinaryMessageEncodingBindingElement(),
new HttpTransportBindingElement());
DuplexServiceClient proxy = new DuplexServiceClient(binding, address);
proxy.ReceiveReceived += new
EventHandler(proxy_ReceiveReceived);
proxy.OrderAsync("Widget", 3);
reply.Text = "Sent order of 3 Widgets." + Environment.NewLine;
}
void proxy_ReceiveReceived(object sender, ReceiveReceivedEventArgs e)
{
if (e.Error == null)
{
reply.Text += "Service reports Widget order is " + e.order.Status +
"." + Environment.NewLine;
if (e.order.Status == OrderStatus.Completed)
{
reply.Text += "Here is the completed order:" +
Environment.NewLine;
foreach (string order in e.order.Payload)
{
reply.Text += order + Environment.NewLine;
}
}
}
}
}
}
Pre zobrazenie textu je na XAML stránke jediný prvok typu Text Block. Vytvorenie WCF Duplex Services služby je mimo tému tejto publikácie, popis nájdete na msdn http://msdn.microsoft.com/en-us/library/dd470106(VS.95).aspx a hotový kód celého riešenia serverovej aj klientskej strany si môžete prevziať z blogu http://www.davidezordan.net/blog/?p=935.
Späť na obsah