/// <summary>
        /// Callback method that sends the request to the WorkerProcess for further processing.
        /// It handles each request sequencially without blocking the asynchronous request.
        /// </summary>
        /// <param name="ar"> The IAsyncResult from async request.</param>
        protected void SessionScriptingCallback(IAsyncResult ar)
        {
            // Get HttpScriptingState
            ScriptingHttpState httpState = (ScriptingHttpState)ar.AsyncState;

            // new InspectorPipelineCommand
            SessionScriptingPipelineCommand scriptingPipeline =
                new SessionScriptingPipelineCommand(httpState,
                ProxySettings,
                new PipelineCommandResultEventHandler(RequestCallback)
                );

            try
            {
                HttpWebResponse response = (HttpWebResponse)httpState.HttpRequest.EndGetResponse(ar);

                scriptingPipeline.HttpStateData.HttpResponse = response;
            }
            catch (WebException wex)
            {
                // Handle web exceptions
                if ( wex.Status == WebExceptionStatus.ProtocolError )
                {
                    scriptingPipeline.HttpStateData.HttpResponse = (HttpWebResponse)wex.Response;
                }
                else
                {
                    //ExceptionHandler.RegisterException(wex);
                    scriptingPipeline.ErrorMessage = wex.Message;
                }
            }
            catch (Exception ex)
            {
                // Handle unknown exceptions
                //ExceptionHandler.RegisterException(ex);
                scriptingPipeline.ErrorMessage = ex.Message;
            }

            // enter lock and signaled event
            Monitor.Enter( WorkerProcess.ReceiveList );

            WorkerProcess.ReceiveList.Add(scriptingPipeline);
            WorkerProcess.ReceiveEvent.Set();

            Monitor.Exit( WorkerProcess.ReceiveList );
        }
        //        public static string UploadFileEx( string uploadfile, string url,
        //            string fileFormName, string contenttype,NameValueCollection querystring,
        //            CookieContainer cookies)
        //        {
        //            if( (fileFormName== null) ||
        //                (fileFormName.Length ==0))
        //            {
        //                fileFormName = "file";
        //            }
        //
        //            if( (contenttype== null) ||
        //                (contenttype.Length ==0))
        //            {
        //                contenttype = "application/octet-stream";
        //            }
        //
        //
        //            string postdata;
        //            postdata = "?";
        //            if (querystring!=null)
        //            {
        //                foreach(string key in querystring.Keys)
        //                {
        //                    postdata+= key +"=" + querystring.Get(key)+"&";
        //                }
        //            }
        //            Uri uri = new Uri(url+postdata);
        //
        //
        //            string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
        //            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
        //            webrequest.CookieContainer = cookies;
        //            webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
        //            webrequest.Method = "POST";
        //
        //
        //            // Build up the post message header
        //            StringBuilder sb = new StringBuilder();
        //            sb.Append("--");
        //            sb.Append(boundary);
        //            sb.Append("\r\n");
        //            sb.Append("Content-Disposition: form-data; name=\"");
        //            sb.Append(fileFormName);
        //            sb.Append("\"; filename=\"");
        //            sb.Append(Path.GetFileName(uploadfile));
        //            sb.Append("\"");
        //            sb.Append("\r\n");
        //            sb.Append("Content-Type: ");
        //            sb.Append(contenttype);
        //            sb.Append("\r\n");
        //            sb.Append("\r\n");
        //
        //            string postHeader = sb.ToString();
        //            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);
        //
        //            // Build the trailing boundary string as a byte array
        //            // ensuring the boundary appears on a line by itself
        //            byte[] boundaryBytes =
        //                Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
        //
        //            FileStream fileStream = new FileStream(uploadfile,
        //                FileMode.Open, FileAccess.Read);
        //            long length = postHeaderBytes.Length + fileStream.Length +
        //                boundaryBytes.Length;
        //            webrequest.ContentLength = length;
        //
        //            Stream requestStream = webrequest.GetRequestStream();
        //
        //            // Write out our post header
        //            requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
        //
        //            // Write out the file contents
        //            byte[] buffer = new Byte[checked((uint)Math.Min(4096,
        //                (int)fileStream.Length))];
        //            int bytesRead = 0;
        //            while ( (bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0 )
        //                requestStream.Write(buffer, 0, bytesRead);
        //
        //            // Write out the trailing boundary
        //            requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
        //            WebResponse responce = webrequest.GetResponse();
        //            Stream s = responce.GetResponseStream();
        //            StreamReader sr = new StreamReader(s);
        //
        //            return sr.ReadToEnd();
        //        }
        /// <summary>
        /// Creates a sync ResponseBuffer.
        /// </summary>
        /// <param name="state"> The ScriptingHttpState type.</param>
        /// <returns> A ResponseBuffer.</returns>
        private ResponseBuffer CreateSyncResponse(ScriptingHttpState state)
        {
            HttpWebResponse r = (HttpWebResponse)state.HttpRequest.GetResponse();
            state.HttpResponse = r;
            Scripting.SessionScriptingPipelineCommand pipelineCommand = new SessionScriptingPipelineCommand(state, this.ProxySettings, null);
            pipelineCommand.ExecuteCommand();

            if (pipelineCommand.ErrorMessage.Length > 0)
            {
                return pipelineCommand.HttpResponseData;
            }
            else
            {
                return null;
            }
        }