如何在不使用ping的情况下检查Web服务是否已启动并运行?

如何检查Web服务中的方法是否正常工作? 我不能用ping。 我仍然想检查客户端从Web服务调用的任何方法。 我知道很难概括,但应该有一些方法。

我使用这种方法,它工作正常:

public bool IsAddressAvailable(string address) { try { System.Net.WebClient client = new WebClient(); client.DownloadData(address); return true; } catch { return false; } } 

了解Web服务方法是否正常工作的唯一方法是调用该方法,然后评估结果是否“正常”。 如果要保留“精细”与时间的记录,则可以记录评估结果。

没有更通用的方法来做任何有意义的事情。 考虑:

  1. 您可以使用代码创建与服务端点的HTTP连接,但成功并不会告诉您服务是否会在发送任何消息后立即引发exception。
  2. 您可以连接并向其发送无效消息,但这并不能说明问题。
  3. 您可以连接并向其发送有效消息,然后检查结果以确保其有效。 这将为您提供一个非常好的主意,当真正的客户端立即调用服务时,真正的客户端应该期望有效的结果。
  4. 除非服务以此为契机,否则只是为了惹恼你!

最好的技术是使用WCF跟踪(可能使用消息级别跟踪)来记录服务实际发生的情况,无论好坏。 然后人类可以查看日志以查看它们是否“正常”。

您可以编写自己的小工具或Windows服务或任何您需要的东西,然后查看这两篇文章:

C#:如何以编程方式检查Web服务是否已启动并正在运行?

检查Web服务是否已启动并正常运行 – 高效

编辑:这是我在类似场景中的实现,我需要知道每次调用之前是否仍然存在外部服务:

 bool IsExternalServiceRunning { get { bool isRunning = false; try { var endpoint = new ServiceClient(); var serviceUri = endpoint.Endpoint.Address.Uri; var request = (HttpWebRequest)WebRequest.Create(serviceUri); request.Timeout = 1000000; var response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode == HttpStatusCode.OK) isRunning = true; } #region catch (Exception ex) { // Handle error } #endregion return isRunning; } } 

只需在webservice的方法中使用try catch,并将exception记录到日志文件或事件日志中。 例:

 [OperationContract] public bool isGUID(string input) { bool functionReturnValue = false; try { Guid guid; functionReturnValue = Guid.TryParse(input, guid); } catch (Exception ex) { Log.WriteServerErrorLog(ex); } return functionReturnValue; } 

您不需要ping Web服务,而是使用监视服务或其他东西ping服务器。 没有必要“ping”Web服务。 我还认为你无论如何都不需要这样做。 您的Web服务可以正常工作,或者因为代码错误而无法正常工作。

你可以尝试curl 。 这是一个Linux工具,也应该在Cygwin中。

 $ curl http://google.com  301 Moved 

301 Moved

The document has moved here.

有很多选择; 例子可以在’网上找到。

在我看来,你有两个选择:

  • 如果您可以访问正在运行的服务器,请记录每个调用(以及抛出的exception)。
    读取日志文件时使用类似于文件正在写入时更新的软件。

  • 如果您无法访问服务器,则必须使Web服务将该日志远程写入您有权访问的另一台计算机。
    流行的记录器内置了此function。( Log4Net ,…)

到目前为止,Powershell是一种“ping”Web服务端点的简单方法。

使用以下表达式:

 Test-NetConnection -Port 4408 -ComputerName 192.168.134.1 

以下是不存在或未侦听的端口的故障响应;

 WARNING: TCP connect to 192.168.134.1:4408 failed ComputerName : 192.168.134.1 RemoteAddress : 192.168.134.1 RemotePort : 4408 InterfaceAlias : Ethernet0 SourceAddress : 192.168.134.1 PingSucceeded : True PingReplyDetails (RTT) : 0 ms TcpTestSucceeded : False 

如果地址/端口正在侦听和访问,则以下是成功结果:

 ComputerName : 192.168.134.1 RemoteAddress : 192.168.134.1 RemotePort : 4407 InterfaceAlias : Ethernet0 SourceAddress : 192.168.134.1 TcpTestSucceeded : True