예제 #1
0
 private void Provisione(XSynqSession session, System.ServiceModel.Channels.Binding Binding, Uri uri)
 {
     PendingsNotifier         = new Timer(XSynqSubscriberContextPendingsNotify, null, StaticConfiguration.DocumentPeridicUpdate, Timeout.Infinite);
     Session                  = session;
     Context                  = new XSynqSubscriberContext(this);
     Context.PropertyChanged += XSynqSubscriberContextPropertyChanged;
     InstanceContext          = new InstanceContext(Context);
     Client = new XSynqPublisherClient(InstanceContext, Binding, new EndpointAddress(uri.GetComponents(UriComponents.AbsoluteUri, UriFormat.Unescaped)));
 }
예제 #2
0
 private void Provisione(XSynqSession session, Uri uri)
 {
     PendingsNotifier         = new Timer(XSynqSubscriberContextPendingsNotify, null, StaticConfiguration.DocumentPeridicUpdate, Timeout.Infinite);
     Session                  = session;
     Context                  = new XSynqSubscriberContext(this);
     Context.PropertyChanged += XSynqSubscriberContextPropertyChanged;
     InstanceContext          = new InstanceContext(Context);
     Client = new XSynqPublisherClient(InstanceContext, "AgentEndPoint", uri.GetComponents(UriComponents.AbsoluteUri, UriFormat.Unescaped));
 }
예제 #3
0
        public XSynqSubscriber(XDocument xDocument, XSynqSession session, Uri uri)
        {
            ConnectionState = ConnctionStates.Init;

            XDocument = xDocument;

            Provisione(session, uri);
            Subscribe();
        }
예제 #4
0
        /// <summary>
        /// Crea una Suscripcion a la publicacion, y opcionalmente limita la
        /// suscripcion a una rama puntual del arbol.
        /// </summary>
        /// <returns>Identificador de la instancia del Subscriber.</returns>
        public string Subscribe(string DocumentName, string ClientName, string PublisherBranch, string SubscriberBranch, bool BranchOwner)
        {
            var Session = new XSynqSession
            {
                Identifier       = OperationContext.Current.SessionId,
                DocumentName     = DocumentName,
                ClientName       = ClientName,
                PublisherBranch  = PublisherBranch,
                SubscriberBranch = SubscriberBranch
            };

            try
            {
                Syncro.WaitOne();
                if (Subscritions.ContainsKey(Session.Identifier))
                {
                    Subscritions[Session.Identifier].Session = Session;
                    return(Session.Identifier);
                }
            }
            finally
            {
                Syncro.Set();
            }

            var xSynqDocument = XSynqDocument.GetSynqDocument(Session.DocumentName);

            if (xSynqDocument == null)
            {
                throw new XSynqFaultException(XSynqFaultCode.DocumentNotFound);
            }

            var si = new XSynqSessionInstance
            {
                Session            = Session,
                XSynqDocument      = xSynqDocument,
                PendingChangelog   = new XDocument(new XElement("changeset")),
                CallbackSubscriber =
                    OperationContext.Current.GetCallbackChannel <IXSynqPublisherCallback>()
            };

            Syncro.WaitOne();
            Subscritions.Add(Session.Identifier, si);
            Syncro.Set();

            STrace.Debug(GetType().FullName, String.Format("Subscribe: client={0} SessionId={1}", CurrentSession().Session.ClientName, Session.Identifier));

            return(Session.Identifier);
        }
예제 #5
0
        public XSynqSubscriber(XDocument xDocument, XSynqSession session, Uri uri, int BufferSize)
        {
            ConnectionState = ConnctionStates.Init;
            XDocument       = xDocument;

            var binding = new NetTcpBinding
            {
                Name                   = "NetTcpBinding_Client",
                SendTimeout            = new TimeSpan(0, 5, 0),
                TransferMode           = TransferMode.Buffered,
                MaxBufferPoolSize      = BufferSize,
                MaxBufferSize          = BufferSize,
                MaxReceivedMessageSize = BufferSize,
                ReaderQuotas           = { MaxStringContentLength = BufferSize }
            };

            Provisione(session, binding, uri);
            Subscribe();
        }