0

データベースにレコードがあるかどうかを確認し、そうであればレポートを実行して電子メールを送信し、レコードを削除する単純な Windows サービスを試みています。このサービスをインストールしようとしましたが、インストールされないようです。アプリはプログラムの追加と削除に表示されますが、サービス自体はありません。これがインストールされない理由は何ですか?

これが私のコードです。最初のセクションは実際のサービスです。

namespace ReportSender
{
    public partial class EmailReportService : ServiceBase
    {
        private EmailReportApp _app = new EmailReportApp();

        public EmailReportService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            if (_app == null)
                _app = new EmailReportApp();

            _app.Start();
        }

        protected override void OnStop()
        {
            if (_app != null)
                _app.Stop();
        }


    }
}

2 番目のセクションは、レポートを生成して電子メールで送信するためのコードです。このコードを手動バージョンで使用しているため、動作するはずです。

namespace ReportSender
{
    class EmailReportApp
    {

        // Private fields
        private Thread _thread;
        private EventLog _log;



        private void Execute()
        {
            // Loop until the thread gets aborted

            try
            {
                while (true)
                {
                    // Check for a new record
                    DataClasses1DataContext dc = new DataClasses1DataContext();

                    foreach (var item in dc.reportsSent1s)
                    {
                        string matchedCaseNumber = item.CaseNumberKey;
                        (new MyReportRenderer()).RenderTest(matchedCaseNumber);

                        dc.reportsSent1s.DeleteOnSubmit(item);
                    }
                    dc.SubmitChanges();

                    // Sleep for one minute 
                    Thread.Sleep(60000);
                }
            }
            catch (ThreadAbortException ex)
            {
                _log.WriteEntry(ex.StackTrace.ToString());

                }
            }


        public void Start()
        {
            if (!EventLog.SourceExists("EventLoggerSource"))
                EventLog.CreateEventSource("EventLoggerSource", "Event Logger");
            _log = new EventLog("EventLoggerSource");
            _log.Source = "EventLoggerSource";

            _thread = new Thread(new ThreadStart(Execute));
            _thread.Start();
        }

        public void Stop()
        {
            if (_thread != null)
            {
                _thread.Abort();
                _thread.Join();
            }
        }

    }


    public class MyReportRenderer
    {

        private rs2005.ReportingService2005 rs;
        private rs2005Execution.ReportExecutionService rsExec;



        public void RenderTest(String matchedCaseNumber)
        {
            string HistoryID = null;
            string deviceInfo = null;
            string encoding = String.Empty;
            string mimeType = String.Empty;
            string extension = String.Empty;
            rs2005Execution.Warning[] warnings = null;
            string[] streamIDs = null;

            rs = new rs2005.ReportingService2005();
            rsExec = new rs2005Execution.ReportExecutionService();
            rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
            rsExec.Credentials = System.Net.CredentialCache.DefaultCredentials;
            rs.Url = "http://***.**.***.**/ReportServer_DEVELOPMENT/ReportService2005.asmx";
            rsExec.Url = "http://***.**.***.**/ReportServer_DEVELOPMENT/ReportExecution2005.asmx";


            try
            {
                // Load the selected report.
                rsExec.LoadReport("/LawDept/LawDeptTIC", HistoryID);

                // Set the parameters for the report needed.

                rs2005Execution.ParameterValue[] parameters = new rs2005Execution.ParameterValue[1];
                parameters[0] = new rs2005Execution.ParameterValue();
                parameters[0].Name = "CaseNumberKey";
                parameters[0].Value = matchedCaseNumber;

                rsExec.SetExecutionParameters(parameters, "en-us");

                // get pdf of report 
                Byte[] results = rsExec.Render("PDF", deviceInfo,
                out extension, out encoding,
                out mimeType, out warnings, out streamIDs);

                //pass paramaters for email
                DataClasses1DataContext db = new DataClasses1DataContext();



                var matchedBRT = (from c in db.GetTable<vw_ProductClientInfo>()
                                  where c.CaseNumberKey == matchedCaseNumber
                                  select c.BRTNumber).SingleOrDefault();

                var matchedAdd = (from c in db.GetTable<vw_ProductClientInfo>()
                                  where c.CaseNumberKey == matchedCaseNumber
                                  select c.Premises).SingleOrDefault();


                //send email with attachment
                MailMessage message = new MailMessage("Reports@2341.com", "g@1234.com", "Report for BRT # " + matchedAdd, "Attached if the Tax Information Certificate for the aboved captioned BRT Number");
                MailAddress copy = new MailAddress("123s@gmail.com");
                message.CC.Add(copy);
                SmtpClient emailClient = new SmtpClient("***.**.***.**");
                message.Attachments.Add(new Attachment(new MemoryStream(results), String.Format("{0}" + matchedBRT + ".pdf", "BRT")));
                emailClient.Send(message);
            }

            catch (Exception)
            {


            }
        }
    }
}
4

0 に答える 0