public string GetResultXml(TrafficInfoDirection direction, string urlParams) { TrafficInfoSettingsModel settings = GetSettings; TrafficInfoApiUrl apiUrl = settings.ApiUrlList.FirstOrDefault <TrafficInfoApiUrl>(a => a.name.Equals(direction.ToString())); string reqUrl = $"{apiUrl.url}?{urlParams}"; string result = string.Empty; try { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(reqUrl); req.Method = "GET"; req.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"; req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; req.Timeout = 10000; // 10초만 기다린다. ms 이기 때문에 10초는 10000ms 이다. using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse()) { using (StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)) { result = sr.ReadToEnd(); } } } catch (Exception ex) { string exStr = ex.ToString(); } return(result); }
public ResultXmlWithUpdateModel GetResultXmlWithUpdate(TrafficInfoDirection direction, string xmlPath, string urlParams) { ResultXmlWithUpdateModel rtn = new ResultXmlWithUpdateModel(false, ResultXmlWithUpdateErrorKind.None, string.Empty); TrafficInfoSettingsModel settings = GetSettings; // 혹시라도 xmlPath변수에 저장 디렉토리가 있는지 확인해서 없으면 연결해준다. if (xmlPath.IndexOf(settings.ApiXmlPath) == -1) { xmlPath = Path.Combine(settings.ApiXmlPath, xmlPath); // 각 API 네이밍별로 디렉토리가 구성되도록 해야하기 때문에 // 디렉토리 명을 가져와서 있는지 확인하고 없으면 만든다. string tmpPathDir = Path.GetDirectoryName(xmlPath); if (!Directory.Exists(tmpPathDir)) { Directory.CreateDirectory(tmpPathDir); } } XmlDocument xdRtn = new XmlDocument(); XmlHandling xmlHand = new XmlHandling(); string xml = GetResultXml(direction, urlParams); if (!string.IsNullOrEmpty(xml)) // 통신해서 가져온 내용이 있으면 { // 가져온 XML이 이상한 놈인지 아닌지 검사한다 Tuple <bool, ResultXmlWithUpdateErrorKind, string> tplAvailable = XmlAvailableCheck(xml); if (tplAvailable.Item1 == false) { rtn = new ResultXmlWithUpdateModel(false, tplAvailable.Item2, tplAvailable.Item3); } else { if (File.Exists(xmlPath)) // 파일이 있는지 찾아서 있으면 { // 파일 내용을 받아온 xml을 로컬 xml 파일에 갱신한다. XmlDocument xdResult = xmlHand.GetXmlDocByString(xml); XmlDocument xdTarget = xmlHand.GetXmlDocByFilePath(xmlPath); xdRtn = xmlHand.GetXmlDocWithUpdateProceed(xmlPath, xdTarget, xdResult); } else { // XML 파일이 없으면 생성하고 거기다가 갱신한다. XmlDocument xdResult = xmlHand.GetXmlDocByString(xml); XmlNode resultResp = xdResult.SelectSingleNode("//response"); XmlDocument xdTmp = new XmlDocument(); XmlDeclaration xDeclare = xdTmp.CreateXmlDeclaration("1.0", "UTF-8", null); xdTmp.AppendChild(xDeclare); XmlNode responselist = xdTmp.CreateElement("responselist"); responselist.InnerXml = resultResp.OuterXml; xdTmp.AppendChild(responselist); xdTmp.Save(xmlPath); // 리턴 될 XmlDocument에도 전달해준다 xdRtn.LoadXml(xml); } rtn = new ResultXmlWithUpdateModel(true, ResultXmlWithUpdateErrorKind.None, xdRtn.OuterXml); } } else { rtn = new ResultXmlWithUpdateModel(false, ResultXmlWithUpdateErrorKind.Empty, string.Empty); } return(rtn); }