コード例 #1
0
        internal ResolvedTransport ResolveTransport(string transportId)
        {
            if (m_IsDisposed.WaitOne(0))
            {
                throw new ObjectDisposedException($"Can not create transport {transportId}. TransportManager instance is disposed");
            }

            var transportInfo = m_TransportResolver.GetTransport(transportId);

            if (transportInfo == null)
            {
                throw new ApplicationException($"Transport '{transportId}' is not resolvable");
            }

            var factory = m_TransportFactories.FirstOrDefault(f => f.Name == transportInfo.Messaging);

            if (factory == null)
            {
                throw new ApplicationException($"Can not create transport '{transportId}', {transportInfo.Messaging} messaging is not supported");
            }

            var transport = m_Transports.GetOrAdd(
                transportInfo,
                _logFactory == null
                    ? new ResolvedTransport(_log, transportInfo, () => ProcessTransportFailure(transportInfo), factory)
                    : new ResolvedTransport(_logFactory, transportInfo, () => ProcessTransportFailure(transportInfo), factory));

            return(transport);
        }
コード例 #2
0
        internal ResolvedTransport ResolveTransport(string transportId)
        {
            if (m_IsDisposed.WaitOne(0))
            {
                throw new ObjectDisposedException(string.Format("Can not create transport {0}. TransportManager instance is disposed", transportId));
            }

            var transportInfo = m_TransportResolver.GetTransport(transportId);

            if (transportInfo == null)
            {
                throw new ApplicationException(string.Format("Transport '{0}' is not resolvable", transportId));
            }
            var factory = m_TransportFactories.FirstOrDefault(f => f.Name == transportInfo.Messaging);

            if (factory == null)
            {
                throw new ApplicationException(
                          string.Format("Can not create transport '{0}', {1} messaging is not supported", transportId, transportInfo.Messaging));
            }

            ResolvedTransport transport;

            if (!m_Transports.TryGetValue(transportInfo, out transport))
            {
                lock (m_Transports)
                {
                    if (!m_Transports.TryGetValue(transportInfo, out transport))
                    {
                        transport = _logFactory == null ?
                                    new ResolvedTransport(_log, transportInfo, () => ProcessTransportFailure(transportInfo), factory) :
                                    new ResolvedTransport(_logFactory, transportInfo, () => ProcessTransportFailure(transportInfo), factory);
                        m_Transports.Add(transportInfo, transport);
                    }
                }
            }
            return(transport);
        }