2010-06-09 7 views
6

utilizzando il seguente codice C#:Perché non riesco a ottenere Site.State per un sito FTP quando si utilizza Microsoft.Web.Administration?

using System; 
using Microsoft.Web.Administration; 

namespace getftpstate 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     ServerManager manager = new ServerManager(); 
     foreach (Site site in manager.Sites) 
     { 
     Console.WriteLine("name: " + site.Name); 
     Console.WriteLine("state: " + site.State); 
     Console.WriteLine("----"); 
     } 
    } 
    } 
} 

ottengo il seguente output:

C:\projects\testiisftp\getftpstate\getftpstate\bin\Debug>getftpstate.exe 
name: Default Web Site 
state: Stopped 
---- 
name: Default FTP Site 

Unhandled Exception: System.Runtime.InteropServices.COMException (0x800710D8): T 
he object identifier does not represent a valid object. (Exception from HRESULT: 
0x800710D8) 
    at Microsoft.Web.Administration.Interop.IAppHostProperty.get_Value() 
    at Microsoft.Web.Administration.ConfigurationElement.GetPropertyValue(IAppHos 
tProperty property) 
    at Microsoft.Web.Administration.Site.get_State() 
    at getftpstate.Program.Main(String[] args) in C:\projects\testiisftp\getftpst 
ate\getftpstate\Program.cs:line 17 

Tutte le idee perché potrei essere vedendo quanto sopra errore 0x800710D8 COM? Sono in grado di gestire il sito FTP con il gestore IIS (posso avviare, fermare, modificare le impostazioni, ecc.).

+0

Ho cercato di utilizzare WMI come un lavoro in giro, ma indovinate un po ', siti FTP vengono archiviati sotto il nodo W3SVC nella metabase di IIS (quando l'accesso tramite WMI), e il sito di ServerState restituisce sempre 4 per siti FTP, che significa "Interrotto" in base alla documentazione (anche se viene visualizzato come Avviato in Gestione IIS). http://msdn.microsoft.com/en-us/library/ms524905(v=VS.90).aspx –

+0

Inoltre, ho sollevato questo su MS connect (per favore upvote se questo ti colpisce): https: // connect .microsoft.com/WindowsServerFeedback/feedback/dettagli/566045/comexception-when-accessing-site-state-per-un-ftp-site-using-microsoft-web-administration –

+0

Ho appena provato ad avviare e interrompere il sito FTP tramite entrambi MWA e WMI; né ha funzionato, con risultati simili. Tuttavia, invece di lanciare un'eccezione, WMI non fa nulla in silenzio. –

risposta

1

Penso che la risposta sia che questo è solo un bug nell'API Microsoft IIS con cui dobbiamo convivere. Ho aperto un bug report su MS connect che ha avuto 2 upvotes, tuttavia MS non ha mostrato alcun interesse in questo (e dubito che lo faranno presto).

Non credo ci sia una soluzione alternativa per ottenere lo stato attuale (come chiede la domanda). Alcuni hanno suggerito che dovrei sondare la porta 21, ma questo mi dice solo se c'è un server FTP in esecuzione, non quale server FTP è in esecuzione (come si può avere più siti) - quindi in alcuni casi, questo approccio è completamente inutile.

La soluzione a arresto e l'avvio il sito (che provoca anche un errore simile) è quello di impostare l'avvio automatico su false sul sito FTP e riavviare IIS (che non è grande, ma funziona bene).

5

La prima cosa da chiarire è che Site.State è una proprietà per ottenere lo stato del protocollo HTTP e per questo motivo suppongo che il sito che sta lanciando quell'eccezione non sia probabilmente un sito HTTP.

Se si desidera ottenere lo stato FTP avete bisogno di fare è:

int ftpState = Site.GetChildElement("ftpServer")["state"] 

è possibile verificare se un sito è HTTP o non controllando le Site.Bindings e alla ricerca per la proprietà protocollo, se non ha HTTP o HTTPS, otterrai l'eccezione sopra la quale potresti tranquillamente ignorare.

Per maggiori informazioni: IIS.net FTP Settings/Sample Code

+0

Aha, idea interessante. Hmm, anche se sono sicuro che ho provato ad accedervi in ​​un modo simile - ma farò comunque una prova. Inoltre ho cancellato la mia risposta di conseguenza (spero di poterlo cancellare se hai ragione). –

+0

Provalo, conosco un po 'di MWA (l'ho scritto :)) quindi fammi sapere se non funziona o se ti imbatti in altri problemi. –

+1

Grazie CarolsAg! The'GetChildElement ("ftpServer") 'infatti consente di accedere ai metodi del sito FTP. Ottimo collegamento, anche. –

Problemi correlati