Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Microsoft ha creato un nuovo servizio FTP completamente riscritto per Windows Server® 2008. Questo nuovo servizio FTP incorpora molte nuove funzionalità che consentono agli autori Web di pubblicare il contenuto più facilmente rispetto a prima e offre agli amministratori Web più opzioni di sicurezza e distribuzione.
Il nuovo servizio FTP 7.5 supporta l'estendibilità che consente di estendere la funzionalità predefinita inclusa nel servizio FTP. In particolare, FTP 7.5 supporta la creazione di provider di autenticazione personalizzati. È anche possibile creare provider per la registrazione FTP personalizzata e determinare le informazioni della home directory per gli utenti FTP.
L'estendibilità FTP 7.5 non dispone di una pipeline di elaborazione delle richieste come il modello di processo HTTP in IIS 7.0 e versioni successive, ma è possibile usare il metodo IFtpLogProvider.Log() per implementare azioni personalizzate in risposta ai comandi FTP inviati dai client FTP ed è possibile esaminare il codice di stato FTP per determinare se il comando FTP ha avuto esito positivo o negativo.
Nota
Non è necessario scrivere effettivamente in un file di log quando si implementa il metodo IFtpLogProvider.Log() nei provider.
Come illustrazione pratica, questa procedura dettagliata illustra la procedura per usare il codice gestito per creare un semplice provider FTP che invia un messaggio di posta elettronica ogni volta che viene caricato un file e modifica il testo del messaggio di posta elettronica a seconda che il caricamento abbia avuto esito positivo o negativo.
Il provider FTP in questa procedura dettagliata implementa il metodo IFtpLogProvider.Log() e usa i valori FtpLogEntry.Command e FtpLogEntry.FtpStatus per determinare il comando FTP dal client e lo stato della risposta dal servizio FTP. Inoltre, il provider esegue l'override del metodo IFtpLogProvider.Initialize() per recuperare il nome/la porta e gli indirizzi di posta elettronica del server SMTP per il messaggio di posta elettronica dalle impostazioni del provider nella voce del provider nel file ApplicationHost.config. Se le impostazioni SMTP non sono state aggiunte alle impostazioni di configurazione, il provider FTP restituirà una semplice eccezione al servizio FTP e non eseguirà alcuna operazione. È possibile monitorare queste eccezioni usando la traccia ETW oppure aggiungere istruzioni Debug.WriteLine() per scrivere tale stato nel canale di debug.
Quando un client FTP invia un file al servizio FTP, il client invierà un comando STOR al server. Il server FTP deve rispondere con uno stato 226 se il comando è riuscito o uno stato diverso se il comando non è riuscito. Ad esempio, il servizio FTP potrebbe restituire uno stato 550 se è stata superata la quota del disco dell'utente.
Prerequisiti
Per completare le procedure descritte in questo articolo sono necessari gli elementi seguenti:
IIS 7.0 o versione successiva deve essere installato nel server Windows Server 2008 e deve essere installato anche Gestione Internet Information Services (IIS).
È necessario installare il nuovo servizio FTP 7.5.
È necessario usare Visual Studio 2008.
Nota
Se si usa una versione precedente di Visual Studio, alcuni dei passaggi di questa procedura dettagliata potrebbero non essere corretti.
Passaggio 1: Configurare l'ambiente del progetto
In questo passaggio verrà creato un progetto in Visual Studio 2008 per il provider demo.
Aprire Microsoft Visual Studio 2008.
Fare clic sul menu File , quindi su Nuovo, quindi su Progetto.
Nella finestra di dialogo Nuovo progetto:
- Scegliere Visual C# come tipo di progetto.
- Scegliere Libreria di classi come modello.
- Digitare FtpMailDemo come nome del progetto.
- Fare clic su OK.
Quando si apre il progetto, aggiungere un percorso di riferimento alla libreria di estendibilità FTP:
Fare clic su Progetto e quindi su FtpMailDemo Proprietà.
Fare clic sulla scheda Percorsi di riferimento.
Immettere il percorso dell'assembly di estendibilità FTP per la versione di Windows, dove C: è l'unità del sistema operativo:
Per Windows Server 2008 e Windows Vista:
C:\Windows\assembly\GAC_MSIL\Microsoft.Web.FtpServer\7.5.0.0__31bf3856ad364e35
Per Windows 7:
C:\Program Files\Reference Assemblies\Microsoft\IIS
Fare clic su Aggiungi cartella.
Aggiungere una chiave con nome sicuro al progetto:
- Fare clic su Progetto e quindi su FtpMailDemo Proprietà.
- Fare clic sulla scheda Firma .
- Selezionare la casella di controllo Firma assembly .
- Scegliere <Nuovo...> dalla casella di riepilogo a discesa Nome chiave complessa.
- Immettere FtpMailDemoKey per il nome del file di chiave.
- Se lo si desidera, immettere una password per il file di chiave; in caso contrario, deselezionare la casella di controllo Proteggi il file di chiave con una password .
- Fare clic su OK.
Facoltativo: è possibile aggiungere un evento di compilazione personalizzato per aggiungere automaticamente la DLL alla Global Assembly Cache (GAC) nel computer di sviluppo:
Fare clic su Progetto e quindi su FtpMailDemo Proprietà.
Fare clic sulla scheda Eventi di compilazione.
Immettere quanto segue nella finestra di dialogo Riga di comando dell'evento post-compilazione:
net stop ftpsvc call "%VS90COMNTOOLS%\vsvars32.bat">null gacutil.exe /if "$(TargetPath)" net start ftpsvc
Salvare il progetto.
Passaggio 2: Creare la classe Extensibility
In questo passaggio si implementerà l'interfaccia di estendibilità per il provider demo.
Aggiungere un riferimento alla libreria di estendibilità FTP per il progetto:
- Fare clic su Progetto e quindi su Aggiungi riferimento...
- Nella scheda .NET fare clic su Microsoft.Web.FtpServer.
- Fare clic su OK.
Aggiungere un riferimento a System.Web per il progetto:
- Fare clic su Progetto e quindi su Aggiungi riferimento...
- Nella scheda .NET fare clic su System.Web.
- Fare clic su OK.
Aggiungere il codice per la classe di autenticazione:
In Esplora soluzioni fare doppio clic sul file Class1.cs.
Rimuovere il codice esistente.
Incollare il codice seguente nell'editor:
using System; using System.Collections.Specialized; using System.Diagnostics; using System.Net.Mail; using System.Text; using Microsoft.Web.FtpServer; public sealed class FtpMailDemo : BaseProvider, IFtpLogProvider { private string smtpServerName; private string smtpFromAddress; private string smtpToAddress; private int smtpServerPort; // Override the default initialization method. protected override void Initialize(StringDictionary config) { // Retrieve the provider settings from configuration. smtpServerName = config["smtpServerName"]; smtpFromAddress = config["smtpFromAddress"]; smtpToAddress = config["smtpToAddress"]; // Detect and handle any mis-configured settings. if (!int.TryParse(config["smtpServerPort"], out smtpServerPort)) { smtpServerPort = 25; } if (string.IsNullOrEmpty(smtpServerName)) { throw new ArgumentException( "Missing smtpServerName value in configuration."); } if (string.IsNullOrEmpty(smtpFromAddress)) { throw new ArgumentException( "Missing smtpFromAddress value in configuration."); } if (string.IsNullOrEmpty(smtpToAddress)) { throw new ArgumentException( "Missing smtpToAddress value in configuration."); } } // Implement the logging method. void IFtpLogProvider.Log(FtpLogEntry loggingParameters) { // Test for a file upload operation. if (loggingParameters.Command == "STOR") { // Create an SMTP message. SmtpClient smtpClient = new SmtpClient(smtpServerName, smtpServerPort); MailAddress mailFromAddress = new MailAddress(smtpFromAddress); MailAddress mailToAddress = new MailAddress(smtpToAddress); using (MailMessage mailMessage = new MailMessage(mailFromAddress, mailToAddress)) { // Format the SMTP message as UTF8. mailMessage.BodyEncoding = Encoding.UTF8; // Test for a successful operation. if (loggingParameters.FtpStatus == 226) { // Create a customized message for a successful operation. mailMessage.Subject = "File Uploaded Successfully"; mailMessage.Body = loggingParameters.UserName + " successfully uploaded a file to " + loggingParameters.FullPath; } else { // Create a customized message for a failed operation. mailMessage.Subject = "File Operation Status"; mailMessage.Body = "The FTP service returned a status of " + loggingParameters.FtpStatus + "." + loggingParameters.FtpSubStatus + " when " + loggingParameters.UserName + " attempted to upload a file to " + loggingParameters.FullPath; } try { // Send the email message. smtpClient.Send(mailMessage); } catch (SmtpException ex) { // Send an exception message to the debug // channel if the email fails to send. Debug.WriteLine(ex.Message.ToString()); } } } } }
Salvare e compilare il progetto.
Nota
Se non sono stati usati i passaggi facoltativi per registrare gli assembly nella GAC, sarà necessario copiare manualmente gli assembly nel computer IIS e aggiungere gli assembly alla GAC usando lo strumento Gacutil.exe. Per altre informazioni, vedere l'articolo Gacutil.exe (Strumento Global Assembly Cache).
Passaggio 3: Aggiungere il provider personalizzato a FTP
In questo passaggio si aggiungerà il provider demo al servizio FTP e a un sito FTP.
Determinare le informazioni sull'assembly per il provider di estendibilità:
- In Esplora risorse aprire il
C:\Windows\assembly
percorso, dove C: è l'unità del sistema operativo. - Individuare l'assembly FtpMailDemo .
- Fare clic con il pulsante destro del mouse sull'assembly e quindi scegliere Proprietà.
- Copiare il valore Culture, ad esempio Neutral.
- Copiare il numero di versione , ad esempio 1.0.0.0.
- Copiare il valore del token di chiave pubblica, ad esempio 426f62526f636b73.
- Fare clic su Annulla.
- In Esplora risorse aprire il
Aggiungere il provider di estendibilità all'elenco globale dei provider FTP:
Al momento non esiste un'interfaccia utente che consente di aggiungere un provider personalizzato con le relative impostazioni di configurazione a IIS, quindi sarà necessario usare la sintassi della riga di comando come nell'esempio seguente:
appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"[name='FtpMailDemo',type='FtpMailDemo,FtpMailDemo,version=1.0.0.0,Culture=neutral,PublicKeyToken=426f62526f636b73']" /commit:apphost appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"activation.[name='FtpMailDemo']" /commit:apphost appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"activation.[name='FtpMailDemo'].[key='smtpServerName',value='localhost']" /commit:apphost appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"activation.[name='FtpMailDemo'].[key='smtpServerPort',value='25']" /commit:apphost appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"activation.[name='FtpMailDemo'].[key='smtpFromAddress',value='someone@contoso.com']" /commit:apphost appcmd.exe set config -section:system.ftpServer/providerDefinitions /+"activation.[name='FtpMailDemo'].[key='smtpToAddress',value='someone@contoso.com']" /commit:apphost
Nota
È necessario aggiornare la sintassi precedente usando le informazioni sul tipo gestito per il provider e le impostazioni di configurazione per il server SMTP e gli indirizzi di posta elettronica.
Aggiungere il provider personalizzato a un sito:
Al momento non esiste un'interfaccia utente che consente di aggiungere funzionalità personalizzate a un sito, quindi è necessario usare la sintassi della riga di comando come l'esempio seguente che configura il sito Web predefinito:
AppCmd set site "Default Web Site" /+ftpServer.customFeatures.providers.[name='FtpMailDemo',enabled='true'] /commit:apphost
Riepilogo
In questa procedura dettagliata si è appreso come:
- Creare un progetto in Visual Studio 2008 per un provider FTP personalizzato.
- Implementare l'interfaccia di estendibilità per la funzionalità FTP personalizzata.
- Aggiungere un provider personalizzato al servizio FTP.
Quando gli utenti tentano di caricare file nel sito FTP, il servizio FTP invierà un messaggio di posta elettronica con un messaggio di esito positivo o negativo usando le impostazioni del server SMTP specificate nella definizione del provider.