public virtual IRpcServiceDescriptor GetDescriptor()
        {
            if (_descriptor == null)
                _descriptor = RpcServiceDescriptor.GetDescriptor(this.GetType());

            return _descriptor;
        }
        public static RpcServiceDescriptor GetDescriptor(Type type)
        {
            if (type == null)
                throw new ArgumentNullException("type");

            RpcServiceDescriptor descriptor = (RpcServiceDescriptor) _typeDescriptorCache[type];

            if (descriptor == null)
            {
                descriptor = new RpcServiceDescriptor(type);
                _typeDescriptorCache[type] = descriptor;
            }

            return descriptor;
        }