예제 #1
0
        public static void GenerateHandlerEvent(string hostName, Guid contactId, MessageItem messageItem, EventType eventType, DateTime dateTime, string userAgent, WhoIsInformation geoData, string link)
        {
            string eventHandlerPath;

            switch (eventType)
            {
            case EventType.Open:
                eventHandlerPath = GetEventHandlePath(EventType.Open);
                break;

            case EventType.Unsubscribe:
                eventHandlerPath = GetEventHandlePath(EventType.Unsubscribe);
                link             = "/sitecore modules/Web/EXM/Unsubscribe.aspx";
                break;

            case EventType.UnsubscribeFromAll:
                eventHandlerPath = GetEventHandlePath(EventType.UnsubscribeFromAll);
                link             = "/sitecore modules/Web/EXM/UnsubscribeFromAll.aspx";
                break;

            case EventType.Click:
                eventHandlerPath = GetEventHandlePath(EventType.Click);
                break;

            case EventType.Bounce:
                GenerateBounce(hostName, contactId, messageItem, dateTime);
                return;

            case EventType.SpamComplaint:
                GenerateSpam(hostName, contactId, messageItem, dateTime);
                return;

            default:
                throw new InvalidEnumArgumentException("No such event in ExmEvents");
            }

            var queryStrings         = GetQueryParameters(contactId, messageItem, link);
            var encryptedQueryString = QueryStringEncryption.GetDefaultInstance().Encrypt(queryStrings);

            var parameters = encryptedQueryString.ToQueryString(true);

            var url      = $"{hostName}{eventHandlerPath}{parameters}";
            var fakeData = new RequestHeaderInfo
            {
                UserAgent   = userAgent,
                RequestTime = dateTime,
                GeoData     = geoData
            };
            var response = RequestUrl(url, fakeData);

            if (!response.IsSuccessful)
            {
                Errors++;
            }

            if (response.IsSuccessful && eventType == EventType.Click)
            {
                EndSession(hostName, response);
            }
        }
예제 #2
0
        private RequestHeaderInfo CreateRequestHeader()
        {
            RequestHeaderInfo requestHeader = new RequestHeaderInfo();

            requestHeader.Version             = "1.0";
            requestHeader.CorellationId       = Guid.NewGuid().ToString();
            requestHeader.AuthenticationToken = AuthenticationToken;
            return(requestHeader);
        }
예제 #3
0
 private void ValidateResponse(
     RequestHeaderInfo requestHeader, ResponseHeaderInfo responseHeader, ResponseBase response)
 {
     if (null == responseHeader)
     {
         throw new ResponseValidationException("response header is null");
     }
     if (responseHeader.CorellationId != requestHeader.CorellationId)
     {
         throw new ResponseValidationException("request and response correlation IDs doesn't match!");
     }
     ValidateResponseHeaderStatus(responseHeader, response);
 }
예제 #4
0
        private static ResponseData RequestUrl(string url, RequestHeaderInfo requestHeaderInfo = null, CookieContainer cookieContainer = null)
        {
            var responseData = new ResponseData();

            try
            {
                // Don't use IDisposable HttpClient, seems to cause problems with threads
                if (cookieContainer == null)
                {
                    cookieContainer = new CookieContainer();
                }
                HttpMessageHandler handler = new HttpClientHandler()
                {
                    CookieContainer = cookieContainer
                };
                var client = new HttpClient(handler);
                responseData.Cookies = cookieContainer;

                if (requestHeaderInfo != null)
                {
                    if (requestHeaderInfo.UserAgent != null)
                    {
                        client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", requestHeaderInfo.UserAgent);
                    }

                    var json = JsonConvert.SerializeObject(requestHeaderInfo);
                    client.DefaultRequestHeaders.TryAddWithoutValidation("X-Exm-FakeData", json);
                    client.DefaultRequestHeaders.TryAddWithoutValidation("X-DisableDemo", "true");
                }

                client.Timeout = TimeSpan.FromSeconds(120);

                var res = client.PostAsync(url, new StringContent(string.Empty)).Result;
                if (!res.IsSuccessStatusCode)
                {
                    Sitecore.Diagnostics.Log.Warn($"Exm Generator request to \'{url}\' failed with '{res.StatusCode}'", res);
                    return(responseData);
                }
            }
            catch (TaskCanceledException)
            {
                Timeouts++;
            }
            catch (Exception ex)
            {
                Logger.Instance.LogError("GenerateEventService error", ex);
                return(responseData);
            }
            responseData.IsSuccessful = true;
            return(responseData);
        }
예제 #5
0
        /// <summary>
        /// 实时接口
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="interfaceCode"></param>
        /// <param name="interfaceName"></param>
        /// <param name="PostObj"></param>
        /// <returns></returns>
        public static IRestResponse <T> PostExcute <T>(DataRow InterfaceURLRow, string interfaceName, object PostObj) where T : class, new()
        {
            //BDOs tmpInterFaceConfig = new BDOs("SYS_InterfaceURL", "INTERFACECODE = '"+ interfaceCode+"'");
            if (InterfaceURLRow == null)
            {
                throw new ApplicationException("接口地址未配置!");
            }
            string InterfaceURL = InterfaceURLRow["URL"].ToString();

            if (string.IsNullOrEmpty(InterfaceURL))
            {
                throw new ApplicationException("接口地址未配置!");
            }


            string interfaceCode = InterfaceURLRow["INTERFACECODE"].ToString();

            /////////////////////////////////
            //using (var tmpClient = new HttpClient())
            //{
            //    try
            //    {
            //        var str = JsonConvert.SerializeObject(PostObj);
            //        str = str.Replace("STD_IN_Origin", "STD_IN Origin").Replace("Service_Name", "Service Name");
            //        HttpContent tmpContent = new StringContent(str);
            //        tmpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            //        HttpResponseMessage response = tmpClient.PostAsync(InterfaceURL, tmpContent).Result;//改成自己的
            //        response.EnsureSuccessStatusCode();//用来抛异常的
            //        string  tmpResponseBody= response.Content.ReadAsStringAsync().Result;

            //    }
            //    catch (Exception e)
            //    {
            //        string msg = e.Message;
            //    }
            //}
            ///////////////////////////////////

            var str = JsonConvert.SerializeObject(PostObj);

            str = str.Replace("STD_IN_Origin", "STD_IN Origin").Replace("Service_Name", "Service Name");

            var client  = new RestClient(InterfaceURL);
            var request = new RestRequest();

            request.Method = Method.POST;
            request.AddHeader("Accept", "application/json");
            request.Parameters.Clear();
            request.AddParameter("application/json", str, ParameterType.RequestBody);

            //var content = response.Content; // 返回的网页内容

            //var client = new RestClient(InterfaceURL);
            //var request = new RestRequest(Method.POST) { RequestFormat = DataFormat.Json };
            //request.AddJsonBody(PostObj);
            //request.AddHeader("Content-Type", "application/json; charset=utf-8");

            var content = client.Execute <T>(request);


            //string requestBody = JsonConvert.SerializeObject(PostObj);
            string requestBody = str;

            requestBody = requestBody.Replace("\\\\", "\\");
            string responseBody = content.Content;

            StackTrace trace     = new StackTrace();
            StackFrame frame     = trace.GetFrame(1);
            MethodBase method    = frame.GetMethod();
            String     className = method.ReflectedType.Name;


            if (content.StatusCode != System.Net.HttpStatusCode.OK)
            {
                var  hi    = AppCache.GetCache <RequestHeaderInfo>(Thread.CurrentThread.ManagedThreadId);
                Task task1 = new Task(() =>
                {
                    var ai = new RequestHeaderInfo(hi.LangNo, hi.DBNo, hi.MenuNo, hi.UserNo, hi.UserName, "");
                    AppCache.Add(Thread.CurrentThread.ManagedThreadId, ai);

                    BDO bd1                   = new BDO(null, null, "SYS_InterfaceLog", "1<>1");
                    DataRow drBat1            = bd1.NewRow();
                    drBat1["IsIn"]            = 1;
                    drBat1["SerialNo"]        = Guid.NewGuid();
                    drBat1["FunctionName"]    = method.Name;
                    drBat1["InterfaceName"]   = interfaceName;
                    drBat1["interfaceCode"]   = interfaceCode;
                    drBat1["RequestBody"]     = requestBody;
                    drBat1["ResponseBody"]    = responseBody;
                    drBat1["ResponseCode"]    = "E";
                    drBat1["ResponseMessage"] = content.Content;
                    drBat1["CREATETIME"]      = DateTime.Now;
                    bd1.Rows.Add(drBat1);
                    DataRowsSaveResult drsr1 = bd1.SaveToDB();
                    if (!drsr1.Success)
                    {
                        throw new Exception(drsr1.ErrorText);
                    }
                });
                task1.Start();
                task1.Wait();
            }
            else
            {
                var ResponseCode    = string.Empty;
                var ResponseMessage = string.Empty;
                var ZGUID           = string.Empty;
                try
                {
                    //responseBody=responseBody.Replace("单别-单号", "Message").Replace("错误原因", "Message").Replace("处理结果", "Message");

                    //MES2ERPResult model = Newtonsoft.Json.JsonConvert.DeserializeObject<MES2ERPResult>(responseBody);
                    //if (model == null)
                    //    throw new ApplicationException("返回信息解析失败:" + InterfaceURL + "->" + responseBody);
                    if (content.Data == null)
                    {
                        content.Data = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(responseBody);
                    }
                }
                catch (Exception ex)
                {
                    ResponseCode    = "N/A";
                    ResponseMessage = string.IsNullOrEmpty(responseBody) ? ex.Message : responseBody;
                }

                var  hi    = AppCache.GetCache <RequestHeaderInfo>(Thread.CurrentThread.ManagedThreadId);
                Task task1 = new Task(() =>
                {
                    var ai = new RequestHeaderInfo(hi.LangNo, hi.DBNo, hi.MenuNo, hi.UserNo, hi.UserName, "");
                    AppCache.Add(Thread.CurrentThread.ManagedThreadId, ai);

                    BDO bd1                   = new BDO(null, null, "SYS_InterfaceLog", "1<>1");
                    DataRow drBat1            = bd1.NewRow();
                    drBat1["IsIn"]            = 1;
                    drBat1["SerialNo"]        = Guid.NewGuid();
                    drBat1["FunctionName"]    = method.Name;
                    drBat1["InterfaceName"]   = interfaceName;
                    drBat1["interfaceCode"]   = interfaceCode;
                    drBat1["RequestBody"]     = requestBody;
                    drBat1["ResponseBody"]    = responseBody;
                    drBat1["ResponseCode"]    = ResponseCode;
                    drBat1["ResponseMessage"] = string.IsNullOrEmpty(ResponseMessage) ? "" : ResponseMessage;
                    drBat1["CREATETIME"]      = DateTime.Now;
                    bd1.Rows.Add(drBat1);
                    DataRowsSaveResult drsr1 = bd1.SaveToDB();
                    if (!drsr1.Success)
                    {
                        throw new Exception(drsr1.ErrorText);
                    }
                });
                task1.Start();
                task1.Wait();
            }

            return(content);
        }
예제 #6
0
        /// <summary>
        /// 实时接口 POST请求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="interfaceCode"></param>
        /// <param name="interfaceName"></param>
        /// <param name="PostObj"></param>
        /// <returns></returns>
        public static IRestResponse <T> PostExcute <T>(DataRow InterfaceURLRow, string interfaceName, object PostObj) where T : class, new()
        {
            //BDOs tmpInterFaceConfig = new BDOs("SYS_InterfaceURL", "INTERFACECODE = '"+ interfaceCode+"'");
            if (InterfaceURLRow == null)
            {
                throw new ApplicationException("接口地址未配置!");
            }
            string InterfaceURL = InterfaceURLRow["URL"].ToString();

            if (string.IsNullOrEmpty(InterfaceURL))
            {
                throw new ApplicationException("接口地址未配置!");
            }


            string interfaceCode = InterfaceURLRow["INTERFACECODE"].ToString();
            var    client        = new RestClient(InterfaceURL);
            var    request       = new RestRequest(Method.POST)
            {
                RequestFormat = DataFormat.Json
            };

            request.AddJsonBody(PostObj);
            request.AddHeader("Content-Type", "application/json; charset=utf-8");

            var content = client.Execute <T>(request);


            string requestBody = JsonConvert.SerializeObject(PostObj);

            requestBody = requestBody.Replace("\\\\", "\\");
            string responseBody = content.Content;

            StackTrace trace  = new StackTrace();
            StackFrame frame  = trace.GetFrame(1);
            MethodBase method = frame.GetMethod();

            //String className = method.ReflectedType.Name;


            if (content.StatusCode != System.Net.HttpStatusCode.OK)
            {
                var  hi    = AppCache.GetCache <RequestHeaderInfo>(Thread.CurrentThread.ManagedThreadId);
                Task task1 = new Task(() =>
                {
                    var ai = new RequestHeaderInfo(hi.LangNo, hi.DBNo, hi.MenuNo, hi.UserNo, hi.UserName, "");
                    AppCache.Add(Thread.CurrentThread.ManagedThreadId, ai);

                    BDO bd1                   = new BDO(null, null, "SYS_InterfaceLog", "1<>1");
                    DataRow drBat1            = bd1.NewRow();
                    drBat1["IsIn"]            = 1;
                    drBat1["SerialNo"]        = Guid.NewGuid();
                    drBat1["FunctionName"]    = method.Name;
                    drBat1["InterfaceName"]   = interfaceName;
                    drBat1["interfaceCode"]   = interfaceCode;
                    drBat1["RequestBody"]     = requestBody;
                    drBat1["ResponseBody"]    = responseBody;
                    drBat1["ResponseCode"]    = "E";
                    drBat1["ResponseMessage"] = content.Content;
                    drBat1["CREATETIME"]      = DateTime.Now;
                    bd1.Rows.Add(drBat1);
                    DataRowsSaveResult drsr1 = bd1.SaveToDB();
                    if (!drsr1.Success)
                    {
                        throw new Exception(drsr1.ErrorText);
                    }
                });
                task1.Start();
                task1.Wait();
            }
            else
            {
                var ResponseCode    = string.Empty;
                var ResponseMessage = string.Empty;
                var ZGUID           = string.Empty;
                try
                {
                    T model = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(responseBody);
                    if (model == null)
                    {
                        throw new ApplicationException("返回信息解析失败:" + InterfaceURL + "->" + responseBody);
                    }
                    if (content.Data == null)
                    {
                        content.Data = Newtonsoft.Json.JsonConvert.DeserializeObject <T>(responseBody);
                    }
                }
                catch (Exception ex)
                {
                    ResponseCode    = "N/A";
                    ResponseMessage = string.IsNullOrEmpty(responseBody) ? ex.Message : responseBody;
                }

                var hi = AppCache.GetCache <RequestHeaderInfo>(Thread.CurrentThread.ManagedThreadId);


                Task task1 = new Task(() =>
                {
                    var ai = new RequestHeaderInfo(hi.LangNo, hi.DBNo, hi.MenuNo, hi.UserNo, hi.UserName, "");
                    AppCache.Add(Thread.CurrentThread.ManagedThreadId, ai);

                    BDO bd1                   = new BDO(null, null, "SYS_InterfaceLog", "1<>1");
                    DataRow drBat1            = bd1.NewRow();
                    drBat1["IsIn"]            = 1;
                    drBat1["SerialNo"]        = Guid.NewGuid();
                    drBat1["FunctionName"]    = method.Name;
                    drBat1["InterfaceName"]   = interfaceName;
                    drBat1["interfaceCode"]   = interfaceCode;
                    drBat1["RequestBody"]     = requestBody;
                    drBat1["ResponseBody"]    = responseBody;
                    drBat1["ResponseCode"]    = ResponseCode;
                    drBat1["ResponseMessage"] = string.IsNullOrEmpty(ResponseMessage) ? "" : ResponseMessage;
                    drBat1["CREATETIME"]      = DateTime.Now;
                    bd1.Rows.Add(drBat1);
                    DataRowsSaveResult drsr1 = bd1.SaveToDB();
                    if (!drsr1.Success)
                    {
                        throw new Exception(drsr1.ErrorText);
                    }
                });
                task1.Start();
                task1.Wait();
            }

            return(content);
        }