private void Cleanup(TransportChannelListener channelListener, TimeSpan timeout, bool aborting)
 {
     using (ServiceModelActivity.BoundOperation(this.Activity))
     {
         this.Unregister(channelListener);
     }
     lock (this.ThisLock)
     {
         if (this.openCount <= 0)
         {
             throw Fx.AssertAndThrow("Invalid Open/Close state machine.");
         }
         this.openCount--;
         if (this.openCount == 0)
         {
             using (ServiceModelActivity.BoundOperation(this.Activity, true))
             {
                 if (aborting)
                 {
                     this.OnAbort();
                 }
                 else
                 {
                     this.OnClose(timeout);
                 }
             }
             if (this.Activity != null)
             {
                 this.Activity.Dispose();
             }
         }
     }
 }
        public override IList <TransportManager> Select(TransportChannelListener channelListener)
        {
            bool useIPv4 = (this.ListenUri.HostNameType != UriHostNameType.IPv6) && Socket.OSSupportsIPv4;
            bool useIPv6 = (this.ListenUri.HostNameType != UriHostNameType.IPv4) && Socket.OSSupportsIPv6;

            TcpChannelListener tcpListener = (TcpChannelListener)channelListener;

            if (!this.IsCompatible(tcpListener, useIPv4, useIPv6))
            {
                return(null);
            }

            IList <TransportManager> result = new List <TransportManager>();

            if (useIPv4)
            {
                this.ProcessSelection(tcpListener, IPAddress.Any, UriHostNameType.IPv4,
                                      ref this.ipv4TransportManager, result);
            }
            if (useIPv6)
            {
                this.ProcessSelection(tcpListener, IPAddress.IPv6Any, UriHostNameType.IPv6,
                                      ref this.ipv6TransportManager, result);
            }
            return(result);
        }
Пример #3
0
        internal override void Register(TransportChannelListener channelListener)
        {
            string method = ((HttpChannelListener)channelListener).Method;

            UriPrefixTable <HttpChannelListener> addressTable;

            if (!addressTables.TryGetValue(method, out addressTable))
            {
                lock (ThisLock)
                {
                    if (!addressTables.TryGetValue(method, out addressTable))
                    {
                        Dictionary <string, UriPrefixTable <HttpChannelListener> > newAddressTables =
                            new Dictionary <string, UriPrefixTable <HttpChannelListener> >(addressTables);

                        addressTable             = new UriPrefixTable <HttpChannelListener>();
                        newAddressTables[method] = addressTable;

                        addressTables = newAddressTables;
                    }
                }
            }

            addressTable.RegisterUri(channelListener.Uri,
                                     channelListener.InheritBaseAddressSettings ? hostNameComparisonMode : channelListener.HostNameComparisonModeInternal,
                                     (HttpChannelListener)channelListener);
        }
        internal override void Register(TransportChannelListener channelListener)
        {
            AddressTable.RegisterUri(channelListener.Uri, channelListener.HostNameComparisonModeInternal,
                                     (TChannelListener)channelListener);

            channelListener.SetMessageReceivedCallback(new Action(OnMessageReceived));
        }
Пример #5
0
 TransportManagerContainer(TransportManagerContainer source)
 {
     this.listener          = source.listener;
     this.tableLock         = source.tableLock;
     this.transportManagers = new List <TransportManager>();
     for (int i = 0; i < source.transportManagers.Count; i++)
     {
         this.transportManagers.Add(source.transportManagers[i]);
     }
 }
Пример #6
0
        IList <TransportManager> ITransportManagerRegistration.Select(TransportChannelListener channelListener)
        {
            IList <TransportManager> result = null;

            if (this.IsCompatible((HttpChannelListener)channelListener))
            {
                result = new List <TransportManager>();
                result.Add(this);
            }
            return(result);
        }
Пример #7
0
        IList <TransportManager> ITransportManagerRegistration.Select(TransportChannelListener channelListener)
        {
            IList <TransportManager> list = null;

            if (this.IsCompatible((HttpChannelListener)channelListener))
            {
                list = new List <TransportManager> {
                    this
                };
            }
            return(list);
        }
Пример #8
0
        internal override void Unregister(TransportChannelListener channelListener)
        {
            UriPrefixTable <HttpChannelListener> table;

            if (!this.addressTables.TryGetValue(((HttpChannelListener)channelListener).Method, out table))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("ListenerFactoryNotRegistered", new object[] { channelListener.Uri })));
            }
            System.ServiceModel.HostNameComparisonMode registeredComparisonMode = channelListener.InheritBaseAddressSettings ? this.hostNameComparisonMode : channelListener.HostNameComparisonModeInternal;
            TransportManager.EnsureRegistered <HttpChannelListener>(table, (HttpChannelListener)channelListener, registeredComparisonMode);
            table.UnregisterUri(channelListener.Uri, registeredComparisonMode);
        }
        IList <TransportManager> ITransportManagerRegistration.Select(TransportChannelListener channelListener)
        {
            this.OnSelecting((NamedPipeChannelListener)channelListener);
            IList <TransportManager> list = null;

            if (this.IsCompatible((NamedPipeChannelListener)channelListener))
            {
                list = new List <TransportManager> {
                    this
                };
            }
            return(list);
        }
Пример #10
0
        internal override void Unregister(TransportChannelListener channelListener)
        {
            UriPrefixTable <HttpChannelListener> addressTable;

            if (!addressTables.TryGetValue(((HttpChannelListener)channelListener).Method, out addressTable))
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(
                                                                                                            SR.ListenerFactoryNotRegistered, channelListener.Uri)));
            }

            HostNameComparisonMode registeredMode = channelListener.InheritBaseAddressSettings ? hostNameComparisonMode : channelListener.HostNameComparisonModeInternal;

            EnsureRegistered(addressTable, (HttpChannelListener)channelListener, registeredMode);
            addressTable.UnregisterUri(channelListener.Uri, registeredMode);
        }
        IList <TransportManager> ITransportManagerRegistration.Select(TransportChannelListener channelListener)
        {
            if (!channelListener.IsScopeIdCompatible(this.hostNameComparisonMode, this.listenUri))
            {
                return(null);
            }
            this.OnSelecting((TcpChannelListener)channelListener);
            IList <TransportManager> list = null;

            if (this.IsCompatible((TcpChannelListener)channelListener))
            {
                list = new List <TransportManager> {
                    this
                };
            }
            return(list);
        }
Пример #12
0
        internal void Open(TransportChannelListener channelListener)
        {
            if (DiagnosticUtility.ShouldUseActivity)
            {
                if (this.activity == null)
                {
                    this.activity = ServiceModelActivity.CreateActivity(true);
                    if (DiagnosticUtility.ShouldUseActivity)
                    {
                        if (null != FxTrace.Trace)
                        {
                            FxTrace.Trace.TraceTransfer(this.Activity.Id);
                        }
                        ServiceModelActivity.Start(this.Activity, SR.GetString(SR.ActivityListenAt, channelListener.Uri.ToString()), ActivityType.ListenAt);
                    }
                }
                channelListener.Activity = this.Activity;
            }
            using (ServiceModelActivity.BoundOperation(this.Activity))
            {
                if (DiagnosticUtility.ShouldTraceInformation)
                {
                    TraceUtility.TraceEvent(TraceEventType.Information, TraceCode.TransportListen,
                                            SR.GetString(SR.TraceCodeTransportListen, channelListener.Uri.ToString()), this);
                }
                this.Register(channelListener);
                try
                {
                    lock (ThisLock)
                    {
                        if (openCount == 0)
                        {
                            OnOpen();
                        }

                        openCount++;
                    }
                }
                catch
                {
                    this.Unregister(channelListener);
                    throw;
                }
            }
        }
 internal void Open(TransportChannelListener channelListener)
 {
     if (DiagnosticUtility.ShouldUseActivity)
     {
         if (this.activity == null)
         {
             this.activity = ServiceModelActivity.CreateActivity(true);
             if (DiagnosticUtility.ShouldUseActivity)
             {
                 if (FxTrace.Trace != null)
                 {
                     FxTrace.Trace.TraceTransfer(this.Activity.Id);
                 }
                 ServiceModelActivity.Start(this.Activity, System.ServiceModel.SR.GetString("ActivityListenAt", new object[] { channelListener.Uri.ToString() }), ActivityType.ListenAt);
             }
         }
         channelListener.Activity = this.Activity;
     }
     using (ServiceModelActivity.BoundOperation(this.Activity))
     {
         if (DiagnosticUtility.ShouldTraceInformation)
         {
             TraceUtility.TraceEvent(TraceEventType.Information, 0x80036, System.ServiceModel.SR.GetString("TraceCodeTransportListen", new object[] { channelListener.Uri.ToString() }), this);
         }
         this.Register(channelListener);
         try
         {
             lock (this.ThisLock)
             {
                 if (this.openCount == 0)
                 {
                     this.OnOpen();
                 }
                 this.openCount++;
             }
         }
         catch
         {
             this.Unregister(channelListener);
             throw;
         }
     }
 }
Пример #14
0
        internal override void Register(TransportChannelListener channelListener)
        {
            UriPrefixTable <HttpChannelListener> table;
            string method = ((HttpChannelListener)channelListener).Method;

            if (!this.addressTables.TryGetValue(method, out table))
            {
                lock (base.ThisLock)
                {
                    if (!this.addressTables.TryGetValue(method, out table))
                    {
                        Dictionary <string, UriPrefixTable <HttpChannelListener> > dictionary = new Dictionary <string, UriPrefixTable <HttpChannelListener> >(this.addressTables);
                        table = new UriPrefixTable <HttpChannelListener>();
                        dictionary[method] = table;
                        this.addressTables = dictionary;
                    }
                }
            }
            table.RegisterUri(channelListener.Uri, channelListener.InheritBaseAddressSettings ? this.hostNameComparisonMode : channelListener.HostNameComparisonModeInternal, (HttpChannelListener)channelListener);
        }
Пример #15
0
 internal override void Unregister(TransportChannelListener channelListener)
 {
     TransportManager.EnsureRegistered <TChannelListener>(this.AddressTable, (TChannelListener)channelListener, channelListener.HostNameComparisonModeInternal);
     this.AddressTable.UnregisterUri(channelListener.Uri, channelListener.HostNameComparisonModeInternal);
     channelListener.SetMessageReceivedCallback(null);
 }
 internal override void Unregister(TransportChannelListener channelListener)
 {
     // Nothing to do - we never use the transport manager during normal
     // operation.
 }
 internal override void Register(TransportChannelListener channelListener)
 {
     channelListener.SetMessageReceivedCallback(new Action(OnMessageReceived));
 }
Пример #18
0
 public override IList <TransportManager> Select(TransportChannelListener channelListener)
 {
     return(this.list);
 }
 protected override void OnOpening()
 {
     base.OnOpening();
     this.transportManagerContainer = this.listener.GetTransportManagers();
     this.listener = null;
 }
 public TransportReplyChannelAcceptor(TransportChannelListener listener)
     : base(listener)
 {
     this.listener = listener;
 }
Пример #21
0
 internal void Close(TransportChannelListener channelListener, TimeSpan timeout)
 {
     this.Cleanup(channelListener, timeout, false);
 }
Пример #22
0
 public TransportManagerContainer(TransportChannelListener listener)
 {
     this.listener          = listener;
     this.tableLock         = listener.TransportManagerTable;
     this.transportManagers = new List <TransportManager>();
 }
Пример #23
0
 internal abstract void Unregister(TransportChannelListener channelListener);
Пример #24
0
 internal void Abort(TransportChannelListener channelListener)
 {
     this.Cleanup(channelListener, TimeSpan.Zero, true);
 }
 public abstract IList <TransportManager> Select(TransportChannelListener factory);
 internal override void Unregister(TransportChannelListener channelListener)
 {
 }