Je vyžadována podpora jazyka JavaScript
Některé stránky na tomto webu vyžadují podporu jazyka JavaScript. Váš webový prohlížeč jazyk JavaScript nepodporuje nebo jazyk JavaScript není povolen.
Chcete-li zjistit, zda webový prohlížeč podporuje jazyk JavaScript nebo jazyk JavaScript chcete povolit, přečtěte si nápovědu k vašemu webovému prohlížeči.
Proxy.cs
Download fileToto je zdrojový kód souboru Proxy.cs
Client proxy class for Silverlight Polling Duplex WCF NotificationService.
using System; using SilverlightDuplexSample.NotificationService; namespace SilverlightDuplexSample { internal sealed class UpdateReceivedEventArgs : EventArgs { #region member varible and default property initialization public string Message { get; private set; } #endregion #region constructors and destructors public UpdateReceivedEventArgs(string message) { this.Message = message; } #endregion } internal static class Proxy { #region delegate and events public static event EventHandler<UpdateReceivedEventArgs> UpdateReceived; #endregion #region member varible and default property initialization private static NotificationServiceClient s_NotificationService; private static System.Threading.Timer s_NotificationServiceStayAliveTimer = new System.Threading.Timer(InitializeNotificationService, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5)); #endregion #region action methods public static void Initialize() { InitializeNotificationService(null); } public static void Publish(string message) { bool reconnected = EnsureProxy(); var service = s_NotificationService; Guid token = Guid.NewGuid(); EventHandler<System.ComponentModel.AsyncCompletedEventArgs> handler = null; handler = (s, e) => { if ((Guid)e.UserState != token) { return; } service.PublishCompleted -= handler; if (e.Error != null) { CloseProxy(); if (reconnected) { Publish(message); return; } throw e.Error; } }; service.PublishCompleted += handler; service.PublishAsync(message, token); } #endregion #region private member functions /// <summary> /// Register NotificationService client or reset inactivity timeout /// </summary> /// <param name="state">State</param> private static void InitializeNotificationService(object state) { bool reconnected = EnsureProxy(); var service = s_NotificationService; Guid token = Guid.NewGuid(); EventHandler<System.ComponentModel.AsyncCompletedEventArgs> handler = null; handler = (s, e) => { if ((Guid)e.UserState != token) { return; } service.RegisterClientCompleted -= handler; if (e.Error != null) { CloseProxy(); if (!reconnected) { InitializeNotificationService(null); } } }; service.RegisterClientCompleted += handler; service.RegisterClientAsync(token); } private static void NotificationService_UpdateReceived(object sender, SilverlightDuplexSample.NotificationService.UpdateReceivedEventArgs e) { if (UpdateReceived != null) { UpdateReceived(null, new UpdateReceivedEventArgs(e.Message)); } } private static bool EnsureProxy() { if (s_NotificationService != null) { return false; } var serviceUri = new Uri(System.Windows.Browser.HtmlPage.Document.DocumentUri, "NotificationService.svc"); var address = new System.ServiceModel.EndpointAddress(serviceUri); var binding = new System.ServiceModel.PollingDuplexHttpBinding(System.ServiceModel.Channels.PollingDuplexMode.MultipleMessagesPerPoll); s_NotificationService = new NotificationServiceClient(binding, address); s_NotificationService.UpdateReceived += new EventHandler<SilverlightDuplexSample.NotificationService.UpdateReceivedEventArgs>(NotificationService_UpdateReceived); return true; } private static void CloseProxy() { if (s_NotificationService == null) { return; } s_NotificationService.UpdateReceived -= new EventHandler<SilverlightDuplexSample.NotificationService.UpdateReceivedEventArgs>(NotificationService_UpdateReceived); s_NotificationService.Abort(); s_NotificationService = null; } #endregion } }