以编程方式检查IIS7启动画面。

4
我有一个ASP.Net 3.5 Web应用程序(C#),需要编写程序检查我们的另一个不是ASP.Net站点是否正在运行。目前,我有一个方法,其中包含以下代码,它检查状态码是否为200。我遇到的问题是,IIS7启动页面返回了状态码200,而我没有看到响应对象中有任何其他内容,可以让我验证我们期望显示的页面实际上是否显示。如果可能的话,我想避免获取响应并使用StreamReader来查找页面上的div以验证其有效性(类似于这里)。
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlToCheck);
        request.AllowAutoRedirect = true;

        HttpWebResponse response;
        try
        {
            response = (HttpWebResponse)request.GetResponse();

            if (response.StatusCode == HttpStatusCode.OK)
            {
                return true;
            }
            return false;
        }
        catch (Exception)
        {
            return false;
        }

非常感谢您的帮助。


1
你不想阅读响应的原因是什么?你已经发送了请求并收到了响应 - 只需要写5或6行代码来读取响应并查找是否符合你的期望。 - Joe Enos
@JoeEnos 由于某些原因,我一直认为我需要发出另一个请求来获取那些信息,但你是正确的。谢谢! - shakin
1
没问题。我一直觉得HttpWebRequest/HttpWebResponse的语法有点奇怪 - 当你读取响应流时,它看起来像你在做一些额外的事情,但实际上并不是这样。其他一些替代方案(如WebClient和更新的HttpClient)更容易地读取响应。 - Joe Enos
2个回答

5

只需阅读响应(Response),它已经存在并等待着!

Stream s = response.GetResponseStream();
StreamReader r = new StreamReader(s);
string html = r.ReadToEnd();

// IIS7
if(html.Contains(@"<div id=""container"">
<a href=""http://go.microsoft.com/fwlink/?linkid=66138&amp;clcid=0x409""><img src=""welcome.png"" alt=""IIS7"" width=""571"" height=""411""></a>
</div>") {


}

是的,那是一个“显而易见”的时刻。谢谢!我可能会调整代码来检查我们的页面,因为我们的客户可以使用IIS6或IIS7。此外,以防发生任何边缘情况,它也将处理这些情况。 - shakin
是的,这只是一个简单的例子,基于您使用的IIS版本,您将不得不调整您正在搜索的内容。很高兴它能有所帮助。 - Gabe

0

调查其他应用程序返回的标头。很可能与IIS闪屏相比,它将包含一些额外的标头。例如,它可能指定 Cache-Control。如果您的响应没有该标头,则可以预期它是闪屏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接