예제 #1
0
    /// <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
    }
예제 #2
0
    /// <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();
      }
    }
예제 #3
0
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="owner">Ссылка на CAjaxMng</param>
 /// <param name="doOnLogLine">Процедура, которая получает отладочную инфу</param>
 public CAjaxLogin(CAjaxMng owner, DOnLogLine doOnLogLine) {
   this.FOwner = owner;
   this.FDOnLogLine = doOnLogLine;
 }