2010-06-09 65 views
6

使用下面的C#代码:当使用Microsoft.Web.Administration时,为什么我无法为FTP站点获取Site.State?

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("----"); 
     } 
    } 
    } 
} 

我得到以下输出:

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 

任何想法,为什么我可能会看到上述0x800710D8 COM的错误?我可以使用IIS管理器来管理FTP站点(我可以启动,停止,更改设置等)。

+0

我试图使用WMI作为一个变通,但你猜怎么着,FTP站点在IIS元数据库(当访问通过WMI)的W3SVC节点下存储,并且该网站的对于FTP站点,ServerState始终返回4,这意味着根据文档“已停止”(即使它在IIS管理器中显示为已启动)。 http://msdn.microsoft.com/en-us/library/ms524905(v=VS.90).aspx – 2010-06-09 12:21:14

+0

此外,我已经提出了MS连接(请upvote,如果这会影响你):https://连接.microsoft.com/WindowsServerFeedback /反馈/信息/ 566045 /收到COMException-时,访问站点状态换一个-FTP站点,使用微软的Web的管理 – 2010-06-09 12:29:48

+0

只是试图启动,并通过双方停止FTP站点MWA和WMI;都没有工作,有类似的结果。但是,WMI并没有默默地做任何事情,而不是抛出异常。 – 2010-06-09 13:01:17

回答

1

我认为答案是,这仅仅是我们不得不忍受微软IIS API中的错误。我已经打开了一个有2个upvotes的MS连接的错误报告,但是MS对此没有任何兴趣(我怀疑他们很快就会发布)。

我不相信这是用于获取的实际状态(因为这个问题问)一种解决方法。有些人认为我应该探索端口21,但这只是告诉我,如果有一个FTP服务器上运行,而不是 FTP服务器正在运行什么(你可以有多个站点) - 因此,在某些情况下,这种方法是完全没用的。

解决方法:停止并启动该站点(也会导致类似的错误)是在FTP站点上将自动启动设置为false并重新启动IIS(它不是很好,但工作正常)。

5

首先要澄清的是Site.State是一种获取HTTP协议状态的属性,因此我的猜测是抛出该异常的站点可能不是HTTP站点。

如果你想获得你需要做的FTP状态是:

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

您可以HTTP或不通过检查Site.Bindings和寻找协议属性,如果验证网站是否没有HTTP或HTTPS,你会得到上面你可以放心忽略的异常。

欲了解更多信息:IIS.net FTP Settings/Sample Code

+0

啊哈,有趣的想法。嗯,虽然我确定我尝试以类似的方式访问它 - 但我仍然会试试这个。我也有相应的答案(希望我可以删除它,如果你是对的)。 – 2010-07-30 17:40:50

+0

试一试,我知道一些关于MWA(我写的:)),所以让我知道如果它不工作,或者如果你碰到其他问题。 – 2010-07-30 20:03:51

+1

谢谢CarolsAg! 'GetChildElement(“ftpServer”)确实允许你访问FTP站点的方法。伟大的联系,也是。 – 2011-07-31 19:15:43

相关问题