Exemplo n.º 1
0
        //-------------------------------------------------------------------------------------------------------------------------
        //
        //-------------------------------------------------------------------------------------------------------------------------

        /// <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);
            }
        }
Exemplo n.º 2
0
        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));
                    }
                }
            }
        }
Exemplo n.º 3
0
        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();
            //}
        }
Exemplo n.º 4
0
 /// <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);
     }
 }
Exemplo n.º 5
0
 /// <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);
         }
     }
 }
Exemplo n.º 6
0
 /// <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);
         }
     }
 }
Exemplo n.º 7
0
        //-------------------------------------------------------------------------------------------------------------------------
        //
        //-------------------------------------------------------------------------------------------------------------------------

        /// <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);
            }
        }
Exemplo n.º 8
0
        /// <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);
            }
        }
Exemplo n.º 9
0
        //-------------------------------------------------------------------------------------------------------------------------
        //
        //-------------------------------------------------------------------------------------------------------------------------

        /// <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);
        }
Exemplo n.º 10
0
 private void ServerHost_Faulted(object sender, EventArgs e)
 {
     IResponsor.WriteDebug("server channel faulted....");
     Stop();
 }
Exemplo n.º 11
0
 private void ServerHost_Closed(object sender, EventArgs e)
 {
     IResponsor.WriteDebug("server channel closed....");
 }
Exemplo n.º 12
0
 private void WcfHelper_Faulted(object sender, EventArgs e)
 {
     IResponsor.WriteDebug(String.Format("client channel faulted: '{0}'", WcfServiceIp));
     Stop();
 }
Exemplo n.º 13
0
        //-------------------------------------------------------------------------------------------------------------------------
        //
        //-------------------------------------------------------------------------------------------------------------------------

        /// <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);
                }
            }
        }