/// <summary> /// Добавить строку в лог /// </summary> /// <param name="pLine">Строка</param> /// <param name="pOnLogLine">Метод пишущий в лог</param> public static void AddLogLine(String pLine, DOnLogLine pOnLogLine) { #if DEBUG if(pOnLogLine != null) { var thrName = Thread.CurrentThread.Name; pOnLogLine(String.Format("{0} : [{1}] -:- {2}", DateTime.Now, thrName, pLine)); } #endif }
/// <summary> /// Выполняет синхронный запрос к серверу /// </summary> /// <param name="url">URL</param> /// <param name="proxy"></param> /// <param name="prms">Дополнительные параметры запроса</param> /// <param name="userAgentName">Название клиента</param> /// <param name="responseText">Ответ сервера</param> /// <param name="requestException">Ошибка, которая произошла при запросе</param> /// <param name="onLogLine">Метод пишущий лог</param> /// <param name="timeOut">Сек</param> public static void getDataFromSrv(String url, WebProxy proxy, Params prms, String userAgentName, ref String responseText, ref EBioException requestException, DOnLogLine onLogLine, int timeOut) { syncObj4WebRequest.WaitOne(); try { responseText = null; Uri vUri = null; try { vUri = new Uri(url); } catch (Exception ex) { requestException = new EBioException("Строка URL [" + url + "] имеет некорректный формат. Сообщение: " + ex.Message, ex); responseText = ex.ToString(); return; } FCli = (HttpWebRequest)WebRequest.Create(vUri); FCli.Timeout = (timeOut <= 0) ? RequestTimeout : timeOut; if (proxy != null) FCli.Proxy = proxy; FCli.CookieContainer = new CookieContainer(); if (sessionID != null) { FCli.CookieContainer.Add(sessionID); } AddLogLine("<request>: Host: " + vUri.Host, onLogLine); AddLogLine("<request>: URL: " + url, onLogLine); FCli.Method = "POST"; FCli.UserAgent = userAgentName; AddLogLine("<request>: Method: " + FCli.Method, onLogLine); var vParams = (prms == null) ? new Params() : prms; vParams.Add("ajaxrqtimeout", ""+FCli.Timeout); var vParamsToPost = vParams.bldUrlParams(); //String vParamsToPost = ((pParams == null) || (pParams.Count == 0)) ? "emptypost=yes" : pParams.bldUrlParams(); AddLogLine("<request>: Params: " + vParamsToPost, onLogLine); AddLogLine("<request>: " + CS_SESSION_ID_NAME + ": " + ((sessionID != null) ? sessionID.Value : "<null>"), onLogLine); //if(vParamsToPost != null) { byte[] postArray = Encoding.UTF8.GetBytes(vParamsToPost); FCli.ContentType = "application/x-www-form-urlencoded"; FCli.ContentLength = postArray.Length; try { Stream postStream = FCli.GetRequestStream(); try { postStream.Write(postArray, 0, postArray.Length); } finally { if (postStream != null) postStream.Close(); } } catch (Exception ex) { requestException = new EBioException("Ошибка при обрщении к серверу. Сообщение: " + ex.Message, ex); responseText = ex.ToString(); } //} DateTime vStartTimeRequest = DateTime.Now; HttpWebResponse vRsp = null; if (requestException == null) { try { vRsp = (HttpWebResponse)FCli.GetResponse(); } catch (Exception ex) { requestException = new EBioException("Ошибка при получении ответа с сервера. Сообщение: " + ex.Message + "\n" + "Параметры: " + vUri.AbsoluteUri + "?" + vParamsToPost, ex); responseText = ex.ToString(); } } if((vRsp != null) && FCli.HaveResponse) { Cookie vSessIdCoo = vRsp.Cookies[CS_SESSION_ID_NAME]; if (vSessIdCoo != null) { sessionID = vSessIdCoo; } String vSessionID = null; String vCooDom = null; String vCooPath = null; if (vSessIdCoo != null) { vSessionID = (sessionID != null) ? sessionID.Value : null; vCooDom = (sessionID != null) ? sessionID.Domain : "<null>"; vCooPath = (sessionID != null) ? sessionID.Path : "<null>"; } AddLogLine("<recived>: " + CS_SESSION_ID_NAME + ": " + vSessionID, onLogLine); AddLogLine("<recived>: Domain: " + vCooDom, onLogLine); AddLogLine("<recived>: Path: " + vCooPath, onLogLine); var data = vRsp.GetResponseStream(); var reader = new StreamReader(data, Encoding.UTF8); try { responseText = reader.ReadToEnd(); AddLogLine("<recived>: " + responseText, onLogLine); } catch (Exception ex) { requestException = new EBioException("Ошибка при получении ответа с сервера. Сообщение: " + ex.Message + "\n" + "Параметры: " + vUri.AbsoluteUri + "?" + vParamsToPost, ex); responseText = ex.ToString(); } finally { if (data != null) data.Close(); reader.Close(); } if (String.IsNullOrEmpty(responseText)) requestException = new EBioException("Сервер вернул пустой ответ!"); } } finally { FCli = null; syncObj4WebRequest.ReleaseMutex(); } }
/// <summary> /// Конструктор /// </summary> /// <param name="owner">Ссылка на CAjaxMng</param> /// <param name="doOnLogLine">Процедура, которая получает отладочную инфу</param> public CAjaxLogin(CAjaxMng owner, DOnLogLine doOnLogLine) { this.FOwner = owner; this.FDOnLogLine = doOnLogLine; }