Example #1
0
        protected internal virtual IAsyncResult BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, object state)
        {
            IHttpHandler requestHandler = GetHttpHandler(httpContext);

            BeginProcessRequestDelegate beginCallback;
            AsyncCallback endCallback;

            IHttpAsyncHandler asyncHandler = requestHandler as IHttpAsyncHandler;

            if (asyncHandler != null)
            {
                beginCallback = asyncHandler.BeginProcessRequest;
                endCallback   = asyncHandler.EndProcessRequest;
            }
            else
            {
                // execute synchronous IHttpHandler asynchronously
                ProcessRequestDelegate processRequestDelegate = hc => SynchronizationContext.Sync(() => requestHandler.ProcessRequest(hc));
                beginCallback = processRequestDelegate.BeginInvoke;
                endCallback   = processRequestDelegate.EndInvoke;
            }

            return(AsyncResultWrapper.Wrap(callback, state,
                                           (innerCallback, innerState) => beginCallback(HttpContext.Current, innerCallback, innerState),
                                           endCallback, _processRequestTag));
        }
    public void Load()
    {
      CheckInstallPath();

      string strVersion = (string)ConfigurationManager.AppSettings["MapSurfer.Version"];

      AssemblyLoader.Register(strVersion);

      Assembly assembly = AssemblyLoader.LoadAssembly("MapSurfer.Web.dll");

      if (assembly == null)
        throw new FileNotFoundException("MapSurfer.Web.dll");

      string typeName = "MapSurfer.Web.Services.MappingService";
      object[] args = new object[] { (string)ConfigurationManager.AppSettings["MapSurfer.ServiceName"] };

      try
      {
        m_mapService = assembly.CreateInstance(typeName, true, BindingFlags.CreateInstance, null, args, System.Globalization.CultureInfo.InvariantCulture, null);
        MethodInfo methodProcessReq = m_mapService.GetType().GetMethod("ProcessRequest");

        m_processReqDelegate = (ProcessRequestDelegate)Delegate.CreateDelegate(typeof(ProcessRequestDelegate), m_mapService, methodProcessReq);

        MethodInfo methodGetMapUrls = m_mapService.GetType().GetMethod("GetMapUrls");
        m_getMapUrlsDelegate = (GetMapUrlsDelegate)Delegate.CreateDelegate(typeof(GetMapUrlsDelegate), m_mapService, methodGetMapUrls);
      }
      catch (TargetInvocationException tiex)
      {
        throw tiex.GetBaseException();
      }

      AssemblyLoader.Unregister();
    }
 private static string GetDownloadResourceUrl(ProcessRequestDelegate del)
 {
     return string.Format("/0x44/{0}/{1}/{2}",
         PathEncoding.Encode(del.Method.DeclaringType.Assembly.GetName().Name),
         PathEncoding.Encode(del.Method.DeclaringType.FullName),
         PathEncoding.Encode(del.Method.Name)
     );
 }
Example #4
0
 public Request(
     ProcessRequestDelegate <T> operation
     , ValidateRequestDelegate validateRequest   = null
     , AuthorizeRequestDelegate authorizeRequest = null
     ) : base(validateRequest, authorizeRequest)
 {
     _operation = operation;
 }
        public async Task VerifyComponentsHookUpCorrectly()
        {
            IServiceCollection services = new ServiceCollection();

            services.AddTransient <IRequestProcessor, RequestProcessor>();

            var serviceProvider = services.BuildServiceProvider();

            string logKey = "TestLog";
            // Request processing
            ProcessRequestDelegate <string> process =
                async(request, contextBag, cancellationToken) =>
            {
                var log = contextBag[logKey] as StringBuilder;
                log.Append("Processed");
                return(string.Empty);
            };

            ValidateRequestDelegate validator = async(request, contextBag, cancellationToken) =>
            {
                var log = contextBag[logKey] as StringBuilder;
                log.Append("Validated>>");
                return(RequestValidationResult.Instance());
            };

            AuthorizeRequestDelegate authorizer = async(request, contextBag, cancellationToken) =>
            {
                var log = contextBag[logKey] as StringBuilder;
                log.Append("Authorized>>");
                return(new RequestAuthorizationResult());
            };

            var contextBag = ApFrameworkHelper.GetEmptyBag();

            contextBag[logKey] = new StringBuilder();

            var expected = "Authorized>>Validated>>Processed";

            var request   = new Request <string>(process, validator, authorizer);
            var processor = serviceProvider.GetService <IRequestProcessor>();

            await processor.ProcessRequestAsync(request, contextBag);

            var log = contextBag[logKey] as StringBuilder;

            Assert.True(log.ToString() == expected);
        }
        public void Load()
        {
            CheckInstallPath();

            string strVersion = (string)ConfigurationManager.AppSettings["MapSurfer.Version"];

            AssemblyLoader.Register(strVersion);

            Assembly assembly = AssemblyLoader.LoadAssembly("MapSurfer.Web.dll");

            if (assembly == null)
            {
                throw new FileNotFoundException("MapSurfer.Web.dll");
            }

            string typeName = "MapSurfer.Web.Services.MappingService";

            object[] args = new object[] { (string)ConfigurationManager.AppSettings["MapSurfer.ServiceName"] };

            try
            {
                m_mapService = assembly.CreateInstance(typeName, true, BindingFlags.CreateInstance, null, args, System.Globalization.CultureInfo.InvariantCulture, null);
                MethodInfo methodProcessReq = m_mapService.GetType().GetMethod("ProcessRequest");

                m_processReqDelegate = (ProcessRequestDelegate)Delegate.CreateDelegate(typeof(ProcessRequestDelegate), m_mapService, methodProcessReq);

                MethodInfo methodGetMapUrls = m_mapService.GetType().GetMethod("GetMapUrls");
                m_getMapUrlsDelegate = (GetMapUrlsDelegate)Delegate.CreateDelegate(typeof(GetMapUrlsDelegate), m_mapService, methodGetMapUrls);
            }
            catch (TargetInvocationException tiex)
            {
                throw tiex.GetBaseException();
            }

            AssemblyLoader.Unregister();
        }
        public void Send(ProcessRequestDelegate processDel)
        {
            isDone = false;
            state = RequestState.Waiting;
            if (acceptGzip)
                SetHeader ("Accept-Encoding", "gzip");
            ThreadPool.QueueUserWorkItem (new WaitCallback (delegate(object t) {

                Debug.Log("QueueUserWorkItem");
                try {
                    var retry = 0;
                    while (++retry < maximumRetryCount) {
                        if (useCache) {
                            string etag = "";
                            if (etags.TryGetValue (uri.AbsoluteUri, out etag)) {
                                SetHeader ("If-None-Match", etag);
                            }
                        }
                        SetHeader ("Host", uri.Host);
                        var client = new TcpClient ();
                        client.Connect (uri.Host, uri.Port);
                        using (var stream = client.GetStream ()) {
                            var ostream = stream as Stream;
                            if (uri.Scheme.ToLower() == "https") {
                                ostream = new SslStream (stream, false, new RemoteCertificateValidationCallback (ValidateServerCertificate));
                                try {
                                    var ssl = ostream as SslStream;
                                    ssl.AuthenticateAsClient (uri.Host);
                                } catch (Exception e) {
                                    Debug.LogError ("Exception: " + e.Message);
                                    return;
                                }
                            }
                            WriteToStream (ostream);
                            response = new Response ();
                            state = RequestState.Reading;
                            response.ReadFromStream(ostream);
                            processDel(this);

                        }
                        client.Close ();
                        switch (response.status) {
                        case 307:
                        case 302:
                        case 301:
                            uri = new Uri (response.GetHeader ("Location"));
                            continue;
                        default:
                            retry = maximumRetryCount;
                            break;
                        }
                    }
                    if (useCache) {
                        string etag = response.GetHeader ("etag");
                        if (etag.Length > 0)
                            etags[uri.AbsoluteUri] = etag;
                    }

                } catch (Exception e) {
                    Debug.LogWarning("Unhandled Exception, aborting request.");
                    Debug.LogWarning(e);
                    Console.WriteLine ("Unhandled Exception, aborting request.");
                    Console.WriteLine (e);
                    exception = e;
                    response = null;
                }
                state = RequestState.Done;
                isDone = true;
            }));
        }
Example #8
0
        public void Send(ProcessRequestDelegate processDel)
        {
            isDone = false;
            state  = RequestState.Waiting;
            if (acceptGzip)
            {
                SetHeader("Accept-Encoding", "gzip");
            }
            ThreadPool.QueueUserWorkItem(new WaitCallback(delegate(object t) {
                Debug.Log("QueueUserWorkItem");
                try {
                    var retry = 0;
                    while (++retry < maximumRetryCount)
                    {
                        if (useCache)
                        {
                            string etag = "";
                            if (etags.TryGetValue(uri.AbsoluteUri, out etag))
                            {
                                SetHeader("If-None-Match", etag);
                            }
                        }
                        SetHeader("Host", uri.Host);
                        var client = new TcpClient();
                        client.Connect(uri.Host, uri.Port);
                        using (var stream = client.GetStream()) {
                            var ostream = stream as Stream;
                            if (uri.Scheme.ToLower() == "https")
                            {
                                ostream = new SslStream(stream, false, new RemoteCertificateValidationCallback(ValidateServerCertificate));
                                try {
                                    var ssl = ostream as SslStream;
                                    ssl.AuthenticateAsClient(uri.Host);
                                } catch (Exception e) {
                                    Debug.LogError("Exception: " + e.Message);
                                    return;
                                }
                            }
                            WriteToStream(ostream);
                            response = new Response();
                            state    = RequestState.Reading;
                            response.ReadFromStream(ostream);
                            processDel(this);
                        }
                        client.Close();
                        switch (response.status)
                        {
                        case 307:
                        case 302:
                        case 301:
                            uri = new Uri(response.GetHeader("Location"));
                            continue;

                        default:
                            retry = maximumRetryCount;
                            break;
                        }
                    }
                    if (useCache)
                    {
                        string etag = response.GetHeader("etag");
                        if (etag.Length > 0)
                        {
                            etags[uri.AbsoluteUri] = etag;
                        }
                    }
                } catch (Exception e) {
                    Debug.LogWarning("Unhandled Exception, aborting request.");
                    Debug.LogWarning(e);
                    Console.WriteLine("Unhandled Exception, aborting request.");
                    Console.WriteLine(e);
                    exception = e;
                    response  = null;
                }
                state  = RequestState.Done;
                isDone = true;
            }));
        }