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
    }
}