2012-07-13 104 views
1

我有一个调用远程服务器上的Web服务的ASP.NET Web应用程序。我希望应用程序能够检测到由于远程服务器上的任何故障而无法访问Web服务。在ASP.NET中检测Web服务失败

应用程序可以区分远程服务器上的故障和其他情况下的故障是非常重要的。例如,它必须能够检测到防火墙阻止的Web服务URL和远程服务器上的Http服务不可用之间的区别。

任何人都可以提出一个这样做的方法吗?理想情况下,解决方案将使用HttpWebResponse对象上返回的HttpStatusCode。

+0

你使用WCF,一个老式的Web引用,或者只是手动构建一个HttpWebResponse? – 2012-07-13 10:50:56

+0

WCF,但要测试连接,使用HttpWebResponse可能是最轻量级的方法。 – 2012-07-13 10:54:23

回答

1

在调用远程服务器的代码周围放置一个try子句,然后捕获WebException。 WebException对象内部将是一个HttpWebResponse,其中包含有关远程服务器响应的状态码和其他可口信息。

try 
{ 
    var request = (HttpWebRequest)WebRequest.Create("https://remote.service.com/getdata"); 
    request.Method = "GET"; 
    HttpWebResponse response = request.GetResponse() as HttpWebResponse 
} 
catch (WebException wx) 
{ 
    HttpWebResponse webExceptionResponse = (HttpWebResponse)wx.Response; 
    var sr = new StreamReader(webExceptionResponse.GetResponseStream(), Encoding.UTF8); 
    string jsonResult = sr.ReadToEnd(); 
    HttpStatusCode status = webExceptionResponse.StatusCode; 
} 
+0

感谢sanpaco,我看到WebException对象上还有一个状态码,并带有其他有用的信息。 我应该能够安全地使用Http 500状态来确定Web服务本身是否有任何应用程序问题。 任何想法如何我的哪种状态显示托管该服务的Web服务器已关闭? – 2012-09-07 18:31:40

+0

通常'503 Service Unavailable'指示远程服务器已关闭或关闭。尽管如果服务只在防火墙后面,我不确定是否会得到相同的结果。根据我的经验,像这样调用其他服务,我通常只需要调用服务的管理员来验证为什么我会得到特定的错误。但是我认为你很安全,假设任何500范围状态意味着远程服务器有问题。 – sanpaco 2012-09-07 20:23:27