//------------------------------------------------------------------------------------------------------------------------- // //------------------------------------------------------------------------------------------------------------------------- /// <summary> /// 국세청으로 부터 전달 받은 메시지를 DB에 UPDATE 합니다. /// </summary> /// <param name="p_xmldoc"></param> /// <param name="p_reponse_date"></param> public void ResultDataProcess(XmlDocument p_xmldoc, DateTime p_reponse_date) { IResponsor.WriteDebug(p_xmldoc.Name); string _message; bool _result = Responsor.DoSaveRequestAck(p_xmldoc, p_reponse_date, out _message); if (LogCommands == true || _result == false) { ELogger.SNG.WriteLog("X", _message); } if (_result == false) { var _directory = Path.Combine(UAppHelper.NTSFolder, p_reponse_date.ToString("yyyyMM")); if (Directory.Exists(_directory) == false) { Directory.CreateDirectory(_directory); } var _savefile = Path.Combine(_directory, $"response_{p_reponse_date.ToString("yyyyMMddHHmmss")}.xml"); File.WriteAllText(_savefile, p_xmldoc.OuterXml, Encoding.UTF8); } }
void QReader_QReadEvents(object sender, ReceiveCompletedEventArgs e) { QMessage _qmessage = e.Message.Body as QMessage; QClient _client = new QClient(_qmessage); string _command = _qmessage.Command.ToLower(); string _message = _qmessage.Message; if (_qmessage.UsePackage == true) { _message = Serialization.SNG.ReadPackage <string>(_qmessage.Package); } if (Environment.UserInteractive == true) { if (e.Message.Label != "CFG") { IResponsor.WriteDebug(String.Format("READ: '{0}', {1}, {2}, {3}, {4}, {5}, {6}", e.Message.Label, _qmessage.Command, _qmessage.ProductId, _qmessage.pVersion, _qmessage.IpAddress, _qmessage.HostName, _message)); } else { var _dbps = _qmessage.Package.ToParameters(); string _companyId = _dbps["companyId"].ToString(); string _corporateId = _dbps["corporateId"].ToString(); string _productId = _dbps["productId"].ToString(); string _pVersion = _dbps["pVersion"].ToString(); string _appkey = _dbps["appkey"].ToString(); string _appvalue = _dbps["appValue"].ToString(); IResponsor.WriteDebug(String.Format("READ: '{0}', {1}, {2}, {3}, {4}, {5}, {6}", e.Message.Label, _companyId, _corporateId, _productId, _pVersion, _appkey, _appvalue)); } } if (e.Message.Label == "CMD") // command { string _product = _qmessage.ProductId; if (_product != IResponsor.Manager.ProductId) { if (_command == "pong") { QWriter.SetPingFlag(new QClient(_qmessage)); } else if (_command == "signin") { QWriter.AddAgency(IResponsor.Manager, _qmessage); } else if (_command == "signout") { QWriter.RemoveAgency(IResponsor.Manager, new Guid(_message)); } } } }
void QReader_QRemoveEvents(object sender, ReceiveCompletedEventArgs e) { QMessage _qmessage = e.Message.Body as QMessage; IResponsor.WriteDebug(String.Format("remove: {0}, {1}, {2}, {3}, {4}", _qmessage.ProductId, _qmessage.Command, _qmessage.ProductId, _qmessage.IpAddress, _qmessage.Message)); //if (_qmessage.ProductId == CPermit.QSlave.ProductId) //{ // CPermit.Stop(); //} }
/// <summary> /// /// </summary> /// <param name="p_exception"></param> /// <param name="p_message"></param> public void WriteLog(string p_exception, string p_message) { if (Environment.UserInteractive == true) { IResponsor.WriteDebug(p_exception, p_message); } else { WcfClient.WriteLog(IResponsor.g_certapp, p_exception, p_message); } }
/// <summary> /// /// </summary> /// <param name="p_exception"></param> /// <param name="p_message"></param> public void WriteLog(string p_exception, string p_message) { if (Environment.UserInteractive == true) { IResponsor.WriteDebug(p_exception, p_message); } else { if (p_exception != "E" || SoapFiltering == true) { ELogger.SNG.WriteLog(p_exception, p_message); } } }
/// <summary> /// /// </summary> /// <param name="p_exception">exception 에러 값</param> /// <param name="p_message">전달하고자 하는 메시지</param> public void WriteLog(string p_exception, string p_message) { if (Environment.UserInteractive == true) { IResponsor.WriteDebug(p_exception, p_message); } else { try { QFileLog.WriteLog(IResponsor.Manager.HostName, p_exception, p_message); } catch (Exception) { OEventLogger.WriteEntry(p_message, EventLogEntryType.Information); } } }
//------------------------------------------------------------------------------------------------------------------------- // //------------------------------------------------------------------------------------------------------------------------- /// <summary> /// /// </summary> public void Start() { IResponsor.WriteDebug(String.Format("server address {0}...", WcfService.WcfAddress)); try { WcfService.ServerHost.Open(); QReader.QReadEvents += QReader_QReadEvents; QReader.QRemoveEvents += QReader_QRemoveEvents; //CPermit.QStart(); QWriter.QStart(IResponsor.Manager); } catch (Exception ex) { ELogger.SNG.WriteLog(ex); } }
/// <summary> /// /// </summary> public void Stop() { IResponsor.WriteDebug("Stop"); try { QWriter.QStop(IResponsor.Manager); //CPermit.QStop(); if (m_wcf_service != null) { m_wcf_service.Stop(); m_wcf_service = null; } } catch (Exception ex) { ELogger.SNG.WriteLog(ex); } }
//------------------------------------------------------------------------------------------------------------------------- // //------------------------------------------------------------------------------------------------------------------------- /// <summary> /// /// </summary> /// <param name="p_xmldoc"></param> /// <returns></returns> public MimeContent ResultRcvAck(XmlDocument p_xmldoc) { IResponsor.WriteDebug(p_xmldoc.Name); var _resultAckTime = DateTime.Now; XmlNode _messageId = p_xmldoc.SelectSingleNode("descendant::wsa:MessageID", Packing.SNG.SoapNamespaces); if (_messageId == null) { throw new ResponseException("not exist <wsa:MessageID>"); } XmlNode _resultId = p_xmldoc.SelectSingleNode("descendant::kec:ResultID", Packing.SNG.SoapNamespaces); if (_resultId == null) { throw new ResponseException("not exist <kec:ResultID>"); } Header _soapHeader = new Header(); { _soapHeader.ToAddress = UAppHelper.ResultRecvAckToAddress; _soapHeader.Action = Request.eTaxResultRecvAck; _soapHeader.Version = UAppHelper.eTaxVersion; _soapHeader.FromParty = new Party(UAppHelper.SenderBizNo, UAppHelper.SenderBizName); _soapHeader.ToParty = new Party(UAppHelper.ReceiverBizNo, UAppHelper.ReceiverBizName); _soapHeader.OperationType = Request.OperationType_ResultSubmit; _soapHeader.MessageType = Request.MessageType_Response; _soapHeader.TimeStamp = _resultAckTime; _soapHeader.MessageId = Packing.SNG.GetMessageId(_soapHeader.TimeStamp); _soapHeader.RelatesTo = _messageId.InnerText; } Body _soapBody = new Body(); { _soapBody.ResultID = _resultId.InnerText; } //------------------------------------------------------------------------------------------------------------------------- // Signature //------------------------------------------------------------------------------------------------------------------------- XmlDocument _envelope = Packing.SNG.GetSignedSoapEnvelope(null, UCertHelper.AspSignCert.X509Cert2, _soapHeader, _soapBody); byte[] _soappart = Encoding.UTF8.GetBytes(_envelope.OuterXml); //------------------------------------------------------------------------------------------------------------------------- // MIME //------------------------------------------------------------------------------------------------------------------------- MimePart _mimeSoap = new MimePart() { ContentType = "text/xml", CharSet = "UTF-8", ContentId = String.Format("<{0}>", Convertor.SNG.GetRandHexString(32)), Content = _soappart }; MimeContent _responseMime = new MimeContent() { Boundary = "----=_Part_" + Convertor.SNG.GetRandNumString(5) + "_" + Convertor.SNG.GetRandNumString(8) + "." + Convertor.SNG.GetRandNumString(13) }; _responseMime.Parts.Add(_mimeSoap); _responseMime.SetAsStartPart(_mimeSoap); return(_responseMime); }
private void ServerHost_Faulted(object sender, EventArgs e) { IResponsor.WriteDebug("server channel faulted...."); Stop(); }
private void ServerHost_Closed(object sender, EventArgs e) { IResponsor.WriteDebug("server channel closed...."); }
private void WcfHelper_Faulted(object sender, EventArgs e) { IResponsor.WriteDebug(String.Format("client channel faulted: '{0}'", WcfServiceIp)); Stop(); }
//------------------------------------------------------------------------------------------------------------------------- // //------------------------------------------------------------------------------------------------------------------------- /// <summary> /// 국세청으로 부터 전자(세금)계산서 처리결과를 전송 받아서 처리 합니다. /// </summary> /// <param name="p_request">국세청이 보내준 메시지</param> /// <param name="p_response">국세청으로 회신 할 메시지</param> public override void OnResponse(ref HttpRequestStruct p_request, ref HttpResponseStruct p_response) { if (p_request.URL.ToLower() == UAppHelper.AcceptedRequestUrl) { try { MimeContent _receiveMime = (new MimeParser()).DeserializeMimeContent(p_request.Headers["Content-Type"].ToString(), p_request.BodyData); var _xmldoc = new XmlDocument(); _xmldoc.LoadXml(_receiveMime.Parts[0].GetContentAsString()); MimeContent _returnMime = REngine.ResultRcvAck(_xmldoc); { p_response.BodyData = _returnMime.GetContentAsBytes(); p_response.SoapAction = Request.eTaxResultRecvAck; p_response.ContentType = _returnMime.ContentType; p_response.ContentLength = p_response.BodyData.Length; p_response.Headers.Add("SOAPAction", p_response.SoapAction); p_response.Headers.Add("Content-Type", p_response.ContentType); p_response.Headers.Add("Content-Length", p_response.ContentLength.ToString()); p_response.Status = (int)ResponseState.OK; } lock (SyncQueue.SyncRoot) { // 처리 할 메시지를 큐에 추가 함 SyncQueue.Enqueue(_receiveMime); if (QueueThread == null || (QueueThread != null && QueueThread.IsAlive == false)) { QueueThread = new Thread(Parser) { IsBackground = true }; QueueThread.Start(); } } } catch (Exception ex) { IResponsor.WriteDebug(ex); p_response.Status = (int)ResponseState.BAD_REQUEST; string _bodyString = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" + "<HTML><HEAD>\n" + "<META http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n" + "</HEAD>\n" + "<BODY>" + ex.Message + "</BODY></HTML>\n"; p_response.BodyData = Encoding.UTF8.GetBytes(_bodyString); } } else { string _filepath = (String.Format(@"{0}\{1}", WebFolder, p_request.URL.Replace("/", @"\"))).Replace(@"\\", @"\"); if (Directory.Exists(_filepath) == true) { if (File.Exists(_filepath + DefaultPage) == true) { _filepath = Path.Combine(_filepath, DefaultPage); } else { string[] _folders = Directory.GetDirectories(_filepath); string[] _files = Directory.GetFiles(_filepath); string _bodyString = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" + "<HTML><HEAD>\n" + "<META http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n" + "</HEAD>\n" + "<BODY><p>Folder listing, to do not see this add a '" + DefaultPage + "' document\n<p>\n"; for (int i = 0; i < _folders.Length; i++) { _bodyString += String.Format("<br><a href = \"{0}{1}/\">[{1}]</a>\n", p_request.URL, Path.GetFileName(_folders[i])); } for (int i = 0; i < _files.Length; i++) { _bodyString += String.Format("<br><a href = \"{0}{1}\">{1}</a>\n", p_request.URL, Path.GetFileName(_files[i])); } _bodyString += "</BODY></HTML>\n"; p_response.BodyData = Encoding.UTF8.GetBytes(_bodyString); return; } } if (File.Exists(_filepath) == true) { RegistryKey _regkey = Registry.ClassesRoot.OpenSubKey(Path.GetExtension(_filepath), false); // Get the data from a specified item in the key. string _type = (string)_regkey.GetValue("Content Type"); // Open the stream and read it back. p_response.Content = File.Open(_filepath, FileMode.Open, FileAccess.Read); if (String.IsNullOrEmpty(_type) == false) { p_response.Headers["Content-type"] = _type; } } else { p_response.Status = (int)ResponseState.NOT_FOUND; string _bodyString = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n" + "<HTML><HEAD>\n" + "<META http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n" + "</HEAD>\n" + "<BODY>File not found!!</BODY></HTML>\n"; p_response.BodyData = Encoding.UTF8.GetBytes(_bodyString); } } }