Come posso spostare i file da una macchina all'altra usando ASP.NET?
-
03-07-2019 - |
Domanda
Diciamo che ho un sito in cui una volta che l'utente seleziona alcune opzioni, dovrebbe succedere quanto segue:
- Prende i file (in una directory) dalla macchina locale - funziona bene finora
- Li sposta su un server remoto: è qui che ho bisogno di aiuto
dettagli:
- Il server remoto verrà trovato tramite il percorso UNC (\ servername \ xyz)
- Ho accesso al nome utente / password per accedere a quel percorso UNC, ma poiché siamo su un dominio diverso e non controllo le decisioni dell'IT, non posso avere un singolo utente con autorizzazioni in entrambi i domini.
Come posso configurare il mio sito per farlo? Se impersono, allora potrei perdere le autorizzazioni per afferrare i file sul computer locale ...
Nota: ho anche accesso FTP al server remoto. Se esiste una buona API FTP che potrei usare, anche quella funzionerebbe, ma non voglio dover iterare su ogni singolo file.
Oh, anche questo è .NET 1.1.
Questo è un suggerimento su una domanda correlata: Necessità di impersonare l'utente per l'accesso alla risorsa di rete, Account Asp.Net
Soluzione
Ho già eseguito questo dominio incrociato in precedenza. Tutto ciò che serve è che il nome utente e la password siano gli stessi e questo funzionerà, anche se si trovano in domini diversi. La cosa di cui accertarsi è che l'applicazione .NET sia in esecuzione come questo utente.
Ad esempio:
- Nel dominio XYZ ha un utente " filesynch " con una password " pass "
- Nel dominio PDQ un utente "quota filesynch" con una password " pass "
- Assicurati che l'utente PDQ \ filesynch abbia accesso alla condivisione sulla macchina nel dominio PDQ
- Esegui l'applicazione su una macchina nel dominio XYZ come utente XYZ \ filesynch
- Copia i file sulla rete
Altri suggerimenti
Questo potrebbe essere fatto con unc o ftp. Per i primi (unc) potresti usare File.Copy (sorgente, target) - per i secondi puoi usare un paio di tecniche. Se memorizzi ciò che l'utente voleva dalla macchina sul sito remoto, potresti utilizzare un client web (System.Net.WebClient) per scaricare i file tramite qualsiasi URL accessibile (ad esempio: attiva la navigazione dei file in IIS).
Se puoi usare .NET 2.0 hai opzioni migliori con oggetti più affidabili (es: FtpRequest) - c'è un motivo per cui non puoi usare .NET 2.0?