Exemple #1
0
        private LoadedModuleHandle LoadByteCode(string filePath, AspNetHostEngine _eng)
        {
            var code     = _eng.Engine.EngineInstance.Loader.FromFile(filePath);
            var compiler = _eng.Engine.GetCompilerService();
            var byteCode = compiler.CreateModule(code);
            var module   = _eng.Engine.EngineInstance.LoadModuleImage(byteCode);

            return(module);
        }
Exemple #2
0
        private void CallScriptHandler(HttpContext context, AspNetHostEngine _eng)
        {
            #region Загружаем скрипт (файл .os)
            // Кэшируем исходный файл, если файл изменился (изменили скрипт .os) загружаем заново
            // В Linux под Mono не работает подписка на изменение файла.
            LoadedModuleHandle?module = null;
            MemoryCache        cache  = MemoryCache.Default;

            if (_cachingEnabled)
            {
                module = cache[context.Request.PhysicalPath] as LoadedModuleHandle?;

                if (module == null)
                {
                    // Загружаем файл и помещаем его в кэш
                    if (!System.IO.File.Exists(context.Request.PhysicalPath))
                    {
                        context.Response.StatusCode = 404;
                        return;
                    }

                    module = LoadByteCode(context.Request.PhysicalPath, _eng);
                    CacheItemPolicy policy    = new CacheItemPolicy();
                    List <string>   filePaths = new List <string>();
                    filePaths.Add(context.Request.PhysicalPath);
                    policy.ChangeMonitors.Add(new HostFileChangeMonitor(filePaths));

                    cache.Set(context.Request.PhysicalPath, module, policy);
                }
            }
            else
            {
                if (!System.IO.File.Exists(context.Request.PhysicalPath))
                {
                    context.Response.StatusCode = 404;
                    return;
                }

                module = LoadByteCode(context.Request.PhysicalPath, _eng);
            }

            #endregion

            var runner = CreateServiceInstance(module.Value, _eng);

            ProduceResponse(context, runner);
        }
Exemple #3
0
        private IRuntimeContextInstance CreateServiceInstance(LoadedModuleHandle module, AspNetHostEngine _eng)
        {
            var runner = _eng.Engine.EngineInstance.NewObject(module);

            return(runner);
        }