Пример #1
0
 private bool TryLoadActionProvider()
 {
     if (!this.attemptedToLoadActionProvider && (this.dataService.Provider.Configuration.DataServiceBehavior.MaxProtocolVersion >= DataServiceProtocolVersion.V3))
     {
         this.actionProvider = this.dataService.Provider.GetService <IDataServiceActionProvider>();
         this.attemptedToLoadActionProvider = true;
     }
     return(this.actionProvider != null);
 }
        /// <summary>
        /// Tries to load an implementation of IDataServiceActionProvider from the service. Return true if successful; false otherwise.
        /// </summary>
        /// <returns>true if successfully loaded an implementation of IDataServiceActionProvider; false otherwise.</returns>
        private bool TryLoadActionProvider()
        {
            if (!this.attemptedToLoadActionProvider)
            {
                this.actionProvider = this.provider.GetService <IDataServiceActionProvider>();
                if (this.actionProvider != null)
                {
                    // try to get the action resolver for overloads. This can either be the same instance as the action provider, or a separate instance returned by GetService.
                    this.actionResolver = this.actionProvider as IDataServiceActionResolver ?? this.provider.GetService <IDataServiceActionResolver>();
                }

                this.attemptedToLoadActionProvider = true;
            }

            return(this.actionProvider != null);
        }
        private static MetadataProviderEdmModel CreateMetadataProviderEdmModel(DataServiceProviderSimulator metadataProvider, IDataServiceActionProvider actionProvider = null)
        {
            var dataServiceSimulator = new DataServiceSimulatorWithGetService {
                OperationContext = new DataServiceOperationContext(false, new DataServiceHost2Simulator()), ProcessingPipeline = new DataServiceProcessingPipeline()
            };

            dataServiceSimulator.OperationContext.InitializeAndCacheHeaders(dataServiceSimulator);

            var dataServiceConfiguration = new DataServiceConfiguration(metadataProvider);

            dataServiceConfiguration.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
            dataServiceConfiguration.SetServiceActionAccessRule("*", ServiceActionRights.Invoke);
            dataServiceConfiguration.DataServiceBehavior.MaxProtocolVersion = ODataProtocolVersion.V4;

            if (actionProvider != null)
            {
                dataServiceSimulator.Providers.Add(typeof(IDataServiceActionProvider), actionProvider);
            }

            DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(dataServiceSimulator.Instance.GetType(), metadataProvider);
            IDataServiceProviderBehavior   providerBehavior    = DataServiceProviderBehavior.CustomDataServiceProviderBehavior;

            DataServiceProviderWrapper providerWrapper = new DataServiceProviderWrapper(
                new DataServiceCacheItem(
                    dataServiceConfiguration,
                    staticConfiguration),
                metadataProvider,
                metadataProvider,
                dataServiceSimulator,
                false);

            dataServiceSimulator.Provider = providerWrapper;

            var model = new MetadataProviderEdmModel(providerWrapper, new DataServiceStreamProviderWrapper(dataServiceSimulator), DataServiceActionProviderWrapper.Create(dataServiceSimulator));

            model.MetadataProvider.ProviderBehavior = providerBehavior;
            return(model);
        }
Пример #4
0
        public static IDataServiceInvokable CreateServiceActionInvokable(DataServiceOperationContext operationContext, IDataServiceActionProvider actionProvider, ServiceAction serviceAction, object[] parameterTokens)
        {
            WebUtil.CheckArgumentNull(operationContext, "operationContext");
            WebUtil.CheckArgumentNull(actionProvider, "actionProvider");
            WebUtil.CheckArgumentNull(serviceAction, "serviceAction");

            operationContext.CurrentDataService.ProcessingPipeline.AssertAndUpdateDebugStateAtInvokeServiceAction(operationContext.CurrentDataService);

            IDataServiceInvokable result = actionProvider.CreateInvokable(operationContext, serviceAction, parameterTokens);

            WebUtil.CheckResourceExists(result != null, serviceAction.Name);
            return(result);
        }
        private static MetadataProviderEdmModel CreateMetadataProviderEdmModel(DataServiceProviderSimulator metadataProvider, IDataServiceActionProvider actionProvider = null)
        {
            var dataServiceSimulator = new DataServiceSimulatorWithGetService { OperationContext = new DataServiceOperationContext(false, new DataServiceHost2Simulator()), ProcessingPipeline = new DataServiceProcessingPipeline() };
            dataServiceSimulator.OperationContext.InitializeAndCacheHeaders(dataServiceSimulator);

            var dataServiceConfiguration = new DataServiceConfiguration(metadataProvider);
            dataServiceConfiguration.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
            dataServiceConfiguration.SetServiceActionAccessRule("*", ServiceActionRights.Invoke);
            dataServiceConfiguration.DataServiceBehavior.MaxProtocolVersion = ODataProtocolVersion.V4;

            if (actionProvider != null)
            {
                dataServiceSimulator.Providers.Add(typeof(IDataServiceActionProvider), actionProvider);
            }

            DataServiceStaticConfiguration staticConfiguration = new DataServiceStaticConfiguration(dataServiceSimulator.Instance.GetType(), metadataProvider);
            IDataServiceProviderBehavior providerBehavior = DataServiceProviderBehavior.CustomDataServiceProviderBehavior;

            DataServiceProviderWrapper providerWrapper = new DataServiceProviderWrapper(
                    new DataServiceCacheItem(
                        dataServiceConfiguration,
                        staticConfiguration),
                    metadataProvider,
                    metadataProvider,
                    dataServiceSimulator,
                    false);

            dataServiceSimulator.Provider = providerWrapper;

            var model = new MetadataProviderEdmModel(providerWrapper, new DataServiceStreamProviderWrapper(dataServiceSimulator),  DataServiceActionProviderWrapper.Create(dataServiceSimulator));

            model.MetadataProvider.ProviderBehavior = providerBehavior;
            return model;
        }
        public static IDataServiceInvokable CreateServiceActionInvokable(DataServiceOperationContext operationContext, IDataServiceActionProvider actionProvider, ServiceAction serviceAction, object[] parameterTokens)
        {
            WebUtil.CheckArgumentNull <DataServiceOperationContext>(operationContext, "operationContext");
            WebUtil.CheckArgumentNull <IDataServiceActionProvider>(actionProvider, "actionProvider");
            WebUtil.CheckArgumentNull <ServiceAction>(serviceAction, "serviceAction");
            IDataServiceInvokable invokable = actionProvider.CreateInvokable(operationContext, serviceAction, parameterTokens);

            WebUtil.CheckResourceExists(invokable != null, serviceAction.Name);
            return(invokable);
        }
 private bool TryLoadActionProvider()
 {
     if (!this.attemptedToLoadActionProvider && (this.dataService.Provider.Configuration.DataServiceBehavior.MaxProtocolVersion >= DataServiceProtocolVersion.V3))
     {
         this.actionProvider = this.dataService.Provider.GetService<IDataServiceActionProvider>();
         this.attemptedToLoadActionProvider = true;
     }
     return (this.actionProvider != null);
 }