Service fTP transfer

di il
7 risposte

Service fTP transfer

Ciao a tutti,
sono molto novello sul C# e sto creando il mio primo servizio, onestamente ho preso un po' di riferimenti dalla libreria di winscp e sto provando a dilttarmi per veder se riesco a far funzionare il tutto.

Allora il Codice Funziona perfettamente, e quindi, mi direte, che scrivi a fare? Bene, non mi funziona l'installazione di InstallUi.

Il messaggio si ripete
Exception occurred while initializing the installation:
System.BadImageFormatException: Could not load file or assembly 'file:///c:\test\FLR_ftp.APPLICATION' or one of its dependencies. The module was expected to contain an assembly manifest..

e anche se uso setup.exe
Exception occurred while initializing the installation:
System.BadImageFormatException: Could not load file or assembly 'file:///c:\test\setup.exe' or one of its dependencies. The module was expected to contain an assembly manifest..

ho provato come dicevano anche su internet a cambiare i framework ma niente, l'errore continua a essere lo stesso.

il mio Script l'ho suttivido con
Program.cs che contiene

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using WinSCP;

namespace WindowsService2
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
          static void Main()
            {
              ServiceBase[] ServicesToRun;
               ServicesToRun = new ServiceBase[]
                {
                new Service1()
                };
                ServiceBase.Run(ServicesToRun);

            }



    }
}

poi c'è ProjectInstaller.cs a cui non ho toccano niente come da istruzioni

namespace WindowsService2
{
    partial class ProjectInstaller
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary> 
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Component Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller();
            this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller();
            // 
            // serviceProcessInstaller1
            // 
            this.serviceProcessInstaller1.Password = null;
            this.serviceProcessInstaller1.Username = null;
            // 
            // serviceInstaller1
            // 
            this.serviceInstaller1.Description = "E-invoice Service";
            this.serviceInstaller1.DisplayName = "E InvoiceService";
            this.serviceInstaller1.ServiceName = "Service1";
            // 
            // ProjectInstaller
            // 
            this.Installers.AddRange(new System.Configuration.Install.Installer[] {
            this.serviceProcessInstaller1,
            this.serviceInstaller1});

        }

        #endregion

        private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1;
        private System.ServiceProcess.ServiceInstaller serviceInstaller1;
    }
}
infine ho terminato con il servizio Service1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using WinSCP;

namespace WindowsService2
{
    partial class Service1
    {
        public static int MainFLR()
        {
            try
            {
                // Setup session options
                SessionOptions sessionOptions = new SessionOptions
                {
                    Protocol = Protocol.Ftp,
                    HostName = "xx.pop.et",
                    UserName = "zip-ftp",
                    Password = "lalle1",
                    //SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
                };

                using (Session session = new Session())
                {
                    session.Open(sessionOptions);
                    TransferOptions transferOptions = new TransferOptions();
                    transferOptions.TransferMode = TransferMode.Binary;

                    TransferOperationResult transferResult;
                    transferResult =
                        session.GetFiles("/ftp/erbranch/Fatture Elettroniche Fornitori/FLR/*", @"F:\FLR\PRODUCT\Account Payable\", false, transferOptions);

                    // Throw on any error
                    transferResult.Check();

                    // Print results
                    foreach (TransferEventArgs transfer in transferResult.Transfers)
                    {
                        Console.WriteLine("Download of {0} succeeded", transfer.FileName);
                    }

                }


                return 0;
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: {0}", e);
                return 1;
            }
        }
        #region Component Designer generated code

        /// <summary> 
        /// Required method for Designer support - do not modify 
        /// the contents of this method with the code editor.
        /// </summary>

        #endregion
    }
}
è tutto il pomeriggio che ci sto sbattendo la testa, ma niente. Avete Idee? pls

7 Risposte

  • Re: Service fTP transfer

    Salve, c'è l'apposita sezione del forum per C#.
    https://www.iprogrammatori.it/forum-programmazione/csharp/
  • Re: Service fTP transfer

    Ti chiedo Scusa, Erroraccio Cancello.
  • Re: Service fTP transfer

    Ho spostato nella sezione corretta e cancellato il doppio post
  • Re: Service fTP transfer

    Grazie mille
  • Re: Service fTP transfer

    Salve,
    non so se ti può essere d'aiuto, io di solito utilizzo i comandi Service Controller (SC) per installare/disinstallare e gestire i servizi di Windows, sono molto comodi e semplici.



    Ad esempio per installare un servizio dal prompt dei comandi (aperto come admin):
    sc create “ImportaDatiDaEcommerce” binPath=PathCompleto\file.exe
    dove file.exe è l'eseguibile del servizio creato in VS.

    Saluti.
    Lucius
  • Re: Service fTP transfer

    Alla fine sono riuscito, dopo ore e ore di battichiodo, e qui inizia la cosa vermaente divertente, servizio installato in running. Ma non funziona.
    Mi spiego ancora meglio, se prendo il codice e lo metto in una console application, il programma va tranquillamente (eseguendolo a mano) ma se invece creo un Servizio, il servizio nonostante sia in running non succede niente.

    La struttura del servizio è composta da Program . CS che ora è così:
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceProcess;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Einvoice
    {
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            static void Main()
            {
                ServiceBase[] ServicesToRun;
                ServicesToRun = new ServiceBase[]
                {
                    new Service1()
                };
                ServiceBase.Run(ServicesToRun);
            }
        }
    }
    
    

    poi si sussegue da project installer e project designer installer [CODE] using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Configuration.Install; using System.Linq; using System.Threading.Tasks; namespace Einvoice { [RunInstaller(true)] public partial class ProjectInstaller : System.Configuration.Install.Installer { public ProjectInstaller() { InitializeComponent(); } } } QUI IL DESIGNER namespace Einvoice { partial class ProjectInstaller { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Component Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.serviceProcessInstaller1 = new System.ServiceProcess.ServiceProcessInstaller(); this.serviceInstaller1 = new System.ServiceProcess.ServiceInstaller(); this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem; // // serviceProcessInstaller1 // //this.serviceProcessInstaller1.Password = "weakcute"; //this.serviceProcessInstaller1.Username = "mgr"; this.serviceInstaller1.Description = "Einvoice FLR"; this.serviceInstaller1.DisplayName = "EINVOICE"; // // serviceInstaller1 // this.serviceInstaller1.ServiceName = "Service1"; // // ProjectInstaller // this.Installers.AddRange(new System.Configuration.Install.Installer[] { this.serviceProcessInstaller1, this.serviceInstaller1}); } #endregion private System.ServiceProcess.ServiceProcessInstaller serviceProcessInstaller1; private System.ServiceProcess.ServiceInstaller serviceInstaller1; } } infine la parte di codice.
    [CODE] using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Threading.Tasks; using WinSCP; using System.Timers; using System.Net.Mail; using System.IO; namespace Einvoice { public partial class Service1 : ServiceBase { private static Timer tmr = null; public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { tmr = new Timer(60000); //viene eseguito ogni 60 secondi tmr.Elapsed += Tmr_Elapsed; tmr.Enabled = true; //fa partire il timer } protected override void OnStop() { tmr.Enabled = false; } static void Tmr_Elapsed(object sender, ElapsedEventArgs e) { StringBuilder sb = new StringBuilder(); System.String ntop = "empty"; //mail setup configuration MailMessage mail = new MailMessage(); SmtpClient smtpserver = new SmtpClient("exch-smtp"); mail.From = new MailAddress("XX@XXX"); mail.To.Add("S@XX.COM"); mail.CC.Add("XX@XX.COM"); mail.Subject = "Download Automatico di Fatture"; // Setup session options SessionOptions sessionOptions = new SessionOptions { Protocol = Protocol.Ftp, HostName = "MLE.FTP.ei", UserName = "ASR-ftp", Password = "sDRRk", //SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...=" }; using (Session session = new Session()) { session.Open(sessionOptions); TransferOptions transferOptions = new TransferOptions(); transferOptions.TransferMode = TransferMode.Binary; TransferOperationResult transferResult; transferResult = session.GetFiles("/ftp/erbranch/Fatture Elettroniche Fornitori/FLR/*", @"F:\FLR\PRODUCT\Account Payable\", false, transferOptions); // Throw on any error transferResult.Check(); // Print results foreach (TransferEventArgs transfer in transferResult.Transfers) { ntop = (Environment.NewLine + transfer.FileName); sb.Append("Download of {0} succeeded" + transfer.FileName); } } if (ntop == "empty") { mail.Subject = "Download Fatture: Nessun Risultato"; sb.Append("Download Fatture: Nessun Risultato"); } else { mail.Subject = "Download Automatico di Fatture"; sb.Append("Download Automatico di Fatture"); } mail.Body = "This is the Showdown of Invoice Received in FLR-NOTES-FS" + Environment.NewLine + Environment.NewLine + ntop; smtpserver.Port = 25; smtpserver.Send(mail); sb.Append("Mail Sent"); sb.Append("Script Completed on " + DateTime.Now); File.AppendAllText("C:\\temp\\logEinvoice.txt", sb.ToString()); sb.Clear(); } } }
  • Re: Service fTP transfer

    Ho dato un'occhiata ai miei servizi, io uso questo modo di inizializzare l'evento:
    
            protected override void OnStart(string[] args)
            {
                timerServ = new Timer();
                timerServ.Interval = 5000;
                timerServ.Elapsed += new ElapsedEventHandler(OnElapsedTime);
                timerServ.Enabled = true; 
            }
            
            private void OnElapsedTime(object sender, ElapsedEventArgs e)
            {
              // codice da eseguire periodicamente	
              // .........
            }
    
    Secondo me, il modo che usi tu non scatena effettivamente l'evento.

    Lucius
Devi accedere o registrarti per scrivere nel forum
7 risposte