Пример #1
0
        void _logger_LogAdded(object sender, LogAddedEventArgs e)
        {
            // New log added

            ListViewItem oItem = new ListViewItem(e.Trace.TraceTime.ToString());
            string       sTag  = "";

            try
            {
                sTag = ClassLogger.ReadMethodFromRequest(e.Trace.Data);
            }
            catch { }
            oItem.Tag = e.Trace.Data;
            oItem.SubItems.Add(e.Trace.TraceTag);
            oItem.SubItems.Add(e.Trace.TraceThreadId.ToString());
            oItem.SubItems.Add(sTag);

            if (e.Trace.IsErrorResponse)
            {
                oItem.BackColor = Color.Red;
            }

            if (listViewLogIndex.InvokeRequired)
            {
                listViewLogIndex.Invoke(new MethodInvoker(delegate() { listViewLogIndex.Items.Add(oItem); }));
            }
            else
            {
                listViewLogIndex.Items.Add(oItem);
            }
        }
Пример #2
0
        void _logger_LogAdded(object sender, LogAddedEventArgs e)
        {
            // New log added

            Action action = new Action(() =>
            {
                ListViewItem oItem = new ListViewItem(e.Trace.TraceTime.ToString());
                string sTag        = "";
                try
                {
                    sTag = ClassLogger.ReadMethodFromRequest(e.Trace.Data);
                }
                catch { }
                oItem.Tag = e.Trace;
                oItem.SubItems.Add(e.Trace.TraceTag);
                oItem.SubItems.Add(e.Trace.TraceThreadId.ToString());
                oItem.SubItems.Add(sTag);
                oItem.SubItems.Add(String.Empty);
                oItem.SubItems.Add(String.Empty);
                oItem.SubItems.Add(String.Empty);

                UpdateListViewItem(oItem, e.Trace);

                if (listViewLogIndex.InvokeRequired)
                {
                    listViewLogIndex.Invoke(new MethodInvoker(delegate() { listViewLogIndex.Items.Add(oItem); }));
                }
                else
                {
                    listViewLogIndex.Items.Add(oItem);
                }
            });

            Task.Run(action);
        }
Пример #3
0
        public string SendRequest(string sRequest, out string sError, CookieCollection oCookies = null)
        {
            // Send the request and return the response
            _requestName = ClassLogger.ReadMethodFromRequest(sRequest);
            sError       = "";

            if (String.IsNullOrEmpty(_targetURL))
            {
                sError = "No target server specified";
                return("");
            }

            string sResponse = "";
            SecurityProtocolType currentSecurityProtocol = ServicePointManager.SecurityProtocol;

            ServicePointManager.SecurityProtocol = _securityProtocol;
            HttpWebRequest oWebRequest = null;

            try
            {
                oWebRequest = (HttpWebRequest)WebRequest.Create(_targetURL);
            }
            catch (Exception ex)
            {
                sError = ex.Message;
                return("");
            }
            oWebRequest.UserAgent = String.Format("{1}/{0}", Application.ProductVersion, Application.ProductName);
            if (_bypassWebProxy)
            {
                oWebRequest.Proxy = null;
            }

            // Set authentication
            _credentialHandler.ApplyCredentialsToHttpWebRequest(oWebRequest);
            _credentialHandler.LogCredentials(_logger);

            oWebRequest.ContentType = "text/xml;charset=\"utf-8\"";
            oWebRequest.Accept      = "text/xml";
            if (_httpHeaders.Count > 0)
            {
                foreach (string[] header in _httpHeaders)
                {
                    try
                    {
                        switch (header[0].ToLower())
                        {
                        case "user-agent":
                            oWebRequest.UserAgent = header[1];
                            break;

                        case "content-type":
                            oWebRequest.ContentType = header[1];
                            break;

                        case "accept":
                            oWebRequest.Accept = header[1];
                            break;

                        default:
                            oWebRequest.Headers[header[0]] = header[1];
                            break;
                        }
                    }
                    catch { }
                }
            }

            // We add a client-request-id header so that we can easily match request/response
            string clientRequestId = oWebRequest.Headers.Get("client-request-id");

            if (String.IsNullOrEmpty(clientRequestId))
            {
                clientRequestId = Guid.NewGuid().ToString();
                oWebRequest.Headers["client-request-id"] = clientRequestId;
            }
            StringBuilder sTimings = new StringBuilder();

            sTimings.AppendLine("Latency (latency shown in milliseconds, times are in ticks)").AppendLine();
            sTimings.AppendLine($"client-request-id: {clientRequestId}").AppendLine();

            if (String.IsNullOrEmpty(oWebRequest.Headers.Get("return-client-request-id")))
            {
                oWebRequest.Headers["return-client-request-id"] = "true";
            }

            oWebRequest.Method = "POST";
            XmlDocument oSOAPRequest = new XmlDocument();

            if (!String.IsNullOrEmpty(sRequest))
            {
                try
                {
                    oSOAPRequest.LoadXml(sRequest);
                }
                catch (Exception ex)
                {
                    sError    = ex.Message;
                    sResponse = "Request was invalid XML (not sent): " + ex.Message + "\n\r\n\r" + sRequest;
                    Log(sResponse, "Response");
                    return("");
                }
            }

            oWebRequest.CookieContainer = new CookieContainer();
            if (!(oCookies == null))
            {
                // Add cookies to the request
                foreach (Cookie oCookie in oCookies)
                {
                    try
                    {
                        oWebRequest.CookieContainer.Add(oCookie);
                    }
                    catch { }
                }
                LogCookies(oCookies, "Request Cookies");
            }

            LogSSLSettings();

            Stream stream = null;

            try
            {
                stream = oWebRequest.GetRequestStream();
            }
            catch (Exception ex)
            {
                // Failed to send request
                sError    = ex.Message;
                sResponse = "Error occurred: " + ex.Message + "\n\r\n\r";
            }

            if (stream == null)
            {
                // Failed to obtain request stream
                if (String.IsNullOrEmpty(sError))
                {
                    sError = "Failed to open connection";
                }
                if (!String.IsNullOrEmpty(sResponse))
                {
                    Log(sResponse, "Response");
                }
                return("");
            }

            DateTime requestSendStartTime = DateTime.Now;

            if (!string.IsNullOrEmpty(sRequest))
            {
                oSOAPRequest.Save(stream);
            }
            stream.Close();
            DateTime requestSendEndTime = DateTime.Now;

            LogHeaders(oWebRequest.Headers, "Request Headers", _targetURL);
            Log(oSOAPRequest.OuterXml, "Request", clientRequestId);

            oWebRequest.Expect = "";

            DateTime     responseReceiveEndTime   = DateTime.MinValue;
            DateTime     responseReceiveStartTime = DateTime.Now;
            IAsyncResult asyncResult = oWebRequest.BeginGetResponse(null, null);

            asyncResult.AsyncWaitHandle.WaitOne();

            WebResponse oWebResponse = null;

            try
            {
                oWebResponse           = oWebRequest.EndGetResponse(asyncResult);
                responseReceiveEndTime = DateTime.Now;
                _lastResponseHeaders   = oWebResponse.Headers;
                LogHeaders(oWebResponse.Headers, "Response Headers", "", (oWebResponse as HttpWebResponse));
                _responseCookies = (oWebResponse as HttpWebResponse).Cookies;
                LogCookies(_responseCookies, "Response Cookies");
            }
            catch (Exception ex)
            {
                responseReceiveEndTime = DateTime.Now;
                if (ex is WebException)
                {
                    WebException wex = ex as WebException;
                    sError = wex.Message;
                    if (!(wex.Response == null))
                    {
                        using (StreamReader oReader = new StreamReader(wex.Response.GetResponseStream()))
                        {
                            sResponse = oReader.ReadToEnd();
                        }
                        _lastResponseHeaders = wex.Response.Headers;
                        LogHeaders(wex.Response.Headers, "Response Headers", "", (wex.Response as HttpWebResponse));
                    }
                }
                else
                {
                    sError = ex.Message;
                }
            }
            try
            {
                using (StreamReader oReader = new StreamReader(oWebResponse.GetResponseStream()))
                {
                    sResponse += oReader.ReadToEnd();
                }
            }
            catch { }

            try
            {
                oWebResponse.Close();
            }
            catch { }
            Log(sResponse, "Response", clientRequestId);

            sTimings.AppendLine($"Request start: {(long)(requestSendStartTime.Ticks/10000)}");
            sTimings.AppendLine($"Request complete: {(long)(requestSendEndTime.Ticks/10000)}");
            sTimings.AppendLine($"Request latency: {(long)((requestSendEndTime.Ticks- requestSendStartTime.Ticks) / 10000)}").AppendLine();
            sTimings.AppendLine($"Response start: {(long)(responseReceiveStartTime.Ticks / 10000)}");
            sTimings.AppendLine($"Response complete: {(long)(responseReceiveEndTime.Ticks / 10000)}");
            sTimings.AppendLine($"Response latency: {(long)((responseReceiveEndTime.Ticks - responseReceiveStartTime.Ticks) / 10000)}").AppendLine();
            sTimings.AppendLine($"Total time taken (includes processing time): {(long)((responseReceiveEndTime.Ticks - requestSendStartTime.Ticks) / 10000)}");
            Log(sTimings.ToString(), "Latency Report");

            return(sResponse);
        }
Пример #4
0
        public string SendRequest(string sRequest, out string sError, CookieCollection oCookies = null)
        {
            // Send the request and return the response
            _requestName = ClassLogger.ReadMethodFromRequest(sRequest);
            sError       = "";

            if (String.IsNullOrEmpty(_targetURL))
            {
                sError = "No target server specified";
                return("");
            }

            string sResponse = "";
            SecurityProtocolType currentSecurityProtocol = ServicePointManager.SecurityProtocol;

            ServicePointManager.SecurityProtocol = _securityProtocol;
            LogSSLSettings();
            HttpWebRequest oWebRequest = (HttpWebRequest)WebRequest.Create(_targetURL);

            oWebRequest.UserAgent = String.Format("{1}/{0}", Application.ProductVersion, Application.ProductName);
            if (_bypassWebProxy)
            {
                oWebRequest.Proxy = null;
            }

            // Set authentication
            oWebRequest.UseDefaultCredentials = false;
            if (!String.IsNullOrEmpty(_authHeader))
            {
                // Add authorization header
                oWebRequest.Headers["Authorization"] = _authHeader;
            }
            else if (!_noAuth)
            {
                if (_authCertificate != null)
                {
                    oWebRequest.ClientCertificates = new X509CertificateCollection();
                    oWebRequest.ClientCertificates.Add(_authCertificate);
                }
                else
                {
                    oWebRequest.Credentials = _credentials;
                }
            }

            oWebRequest.ContentType = "text/xml;charset=\"utf-8\"";
            oWebRequest.Accept      = "text/xml";
            if (_httpHeaders.Count > 0)
            {
                foreach (string[] header in _httpHeaders)
                {
                    try
                    {
                        if (header[0].ToLower() == "content-type")
                        {
                            oWebRequest.ContentType = header[1];
                        }
                        else if (header[0].ToLower() == "accept")
                        {
                            oWebRequest.Accept = header[1];
                        }
                        else
                        {
                            oWebRequest.Headers[header[0]] = header[1];
                        }
                    }
                    catch { }
                }
            }

            oWebRequest.Method = "POST";
            XmlDocument oSOAPRequest = new XmlDocument();

            if (!String.IsNullOrEmpty(sRequest))
            {
                try
                {
                    oSOAPRequest.LoadXml(sRequest);
                }
                catch (Exception ex)
                {
                    sError    = ex.Message;
                    sResponse = "Request was invalid XML: " + ex.Message + "\n\r\n\r" + sRequest;
                    Log(sResponse, "Response");
                    return("");
                }
            }

            oWebRequest.CookieContainer = new CookieContainer();
            if (!(oCookies == null))
            {
                // Add cookies to the request
                foreach (Cookie oCookie in oCookies)
                {
                    try
                    {
                        oWebRequest.CookieContainer.Add(oCookie);
                    }
                    catch { }
                }
                LogCookies(oCookies, "Request Cookies");
            }

            Stream stream = null;

            try
            {
                stream = oWebRequest.GetRequestStream();
            }
            catch (Exception ex)
            {
                // Failed to send request
                sError    = ex.Message;
                sResponse = "Error occurred: " + ex.Message + "\n\r\n\r";
                Log(sResponse, "Response");
                return("");
            }
            if (!string.IsNullOrEmpty(sRequest))
            {
                oSOAPRequest.Save(stream);
            }
            stream.Close();
            LogHeaders(oWebRequest.Headers, "Request Headers", _targetURL);
            Log(oSOAPRequest.OuterXml, "Request");

            oWebRequest.Expect = "";

            IAsyncResult asyncResult = oWebRequest.BeginGetResponse(null, null);

            asyncResult.AsyncWaitHandle.WaitOne();

            WebResponse oWebResponse = null;

            try
            {
                oWebResponse         = oWebRequest.EndGetResponse(asyncResult);
                _lastResponseHeaders = oWebResponse.Headers;
                LogHeaders(oWebResponse.Headers, "Response Headers", "", (oWebResponse as HttpWebResponse));
                _responseCookies = (oWebResponse as HttpWebResponse).Cookies;
                LogCookies(_responseCookies, "Response Cookies");
            }
            catch (Exception ex)
            {
                if (ex is WebException)
                {
                    WebException wex = ex as WebException;
                    sError = wex.Message;
                    if (!(wex.Response == null))
                    {
                        using (StreamReader oReader = new StreamReader(wex.Response.GetResponseStream()))
                        {
                            sResponse = oReader.ReadToEnd();
                        }
                        _lastResponseHeaders = wex.Response.Headers;
                        LogHeaders(wex.Response.Headers, "Response Headers", "", (wex.Response as HttpWebResponse));
                    }
                }
                else
                {
                    sError = ex.Message;
                }
            }
            try
            {
                using (StreamReader oReader = new StreamReader(oWebResponse.GetResponseStream()))
                {
                    sResponse += oReader.ReadToEnd();
                }
            }
            catch { }

            try
            {
                oWebResponse.Close();
            }
            catch { }
            Log(sResponse, "Response", true);
            return(sResponse);
        }