Exemplo n.º 1
0
        /**
         * This method will be called when a client/browser makes a request. We will pass on
         * required information to the hosting API from this method
         */
        private void ContextReceivedCallback(IAsyncResult asyncResult)
        {
            //Check if listener is listening other wise return
            if (!m_HttpListener.IsListening)
            {
                return;
            }

            //Get the context
            HttpListenerContext listenerContext = m_HttpListener.EndGetContext(asyncResult);

            //Lets get the Listener listening for the next request
            m_HttpListener.BeginGetContext(new AsyncCallback(ContextReceivedCallback), null);

            //If No AspNetEngine was configured, just respond with 404
            if (m_AspNetEngine == null)
            {
                listenerContext.Response.StatusCode = 404;
                listenerContext.Response.Close();
                return;
            }

            //Retrieve the URL requested
            String pageRequested = listenerContext.Request.Url.LocalPath;

            //Remove the "/alias"  from the begining page request as we just need to
            //pass the file and the query out to the Application Host
            pageRequested = AspxVirtualRoot.RemoveAliasFromRequest(pageRequested, m_AspNetEngine.VirtualAlias);

            //Prepare the DataHolder object that will be passed on for processing
            AspxRequestInfo dataHolder = AspxNetEngine.PrepareAspxRequestInfoObject(listenerContext);;

            //Look for Client Certificate if it has any
            if (listenerContext.Request.IsSecureConnection)
            {
                dataHolder.m_ClientCertificate = listenerContext.Request.GetClientCertificate();
                Console.WriteLine("Client certificate received.");
            }

            try
            {
                //Pass the request to the Hosted application
                m_AspNetEngine.ExecutingAppDomain.ProcessRequest(pageRequested, listenerContext.Request.Url.Query.Replace("?", ""), dataHolder);
            }
            catch (AspxException aspxException)
            {
                //Error occured.Log it and move on
                Console.WriteLine(aspxException);
            }

            Console.WriteLine(listenerContext.Request.Url.LocalPath + "...   " +
                              listenerContext.Response.StatusCode + " " + listenerContext.Response.StatusDescription);

            //Finally close the response or else the client will time out
            listenerContext.Response.Close();
        }
Exemplo n.º 2
0
        static void Main()
        {
            try
            {
                //Create a AspxVirtualRoot object with a http port and https port if required
                AspxVirtualRoot virtualRoot = new AspxVirtualRoot(80);

                //Configure a Physical directory as a virtual alias.

                /***
                 * Make sure that the ASPXHostCS.exe is present under the bin directory of
                 * the physical path configured.
                 * To configure a directory as a AspxApplication, the exe for this project ASPXhost.exe
                 * and APSXHostcs.exe.config (if present) should be either present in the bin directory under the
                 * physical directory being configured. The reason being, that the call to
                 * API ApplicationHost.CreateApplicationhost creates a new app domain
                 * and will instantiate a class specified in the typeof variable.
                 * Putting it in the bin directory enables the hosting api to load the class.
                 */

                //TODO: Replace the physical directory with the directory to be configured.
                virtualRoot.Configure("/", Path.GetFullPath(@"..\..\DemoPages"));

                //TODO: If Authentication is to be added, add it here
                //virtualRoot.AuthenticationSchemes = AuthenticationSchemes.Basic;

                Console.WriteLine("ASPXHostVirtualRoot successfully started");
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }

            //Wait till cancelled
            Console.ReadLine();
        }