protected virtual void Dispose(bool disposing)
        {
            if (!_disposed)
            {
                if (disposing)
                {
                    if (oldValue != null)
                    {
#if (SILVERLIGHT)
                        current = (ChannelCreationScope)oldValue;
#else
                        CallContext.LogicalSetData(CallContextKey, oldValue);
#endif
                    }
                    else
                    {
#if (SILVERLIGHT)
                        current = null;
#else
                        CallContext.FreeNamedDataSlot(CallContextKey);
#endif
                    }
                }
                // Cleanup native resources here!
                _disposed = true;
            }
        }
        public ChannelCreationScope(object proxy)
        {
#if (SILVERLIGHT)
            oldValue = current;
#else
            oldValue = CallContext.LogicalGetData(CallContextKey);
#endif
            this.Proxy = proxy;

#if (SILVERLIGHT)
            current = this;
#else
            CallContext.LogicalSetData(CallContextKey, this);
#endif
        }