Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不使用ping的情况下检查web服务是否已启动并运行?_C#_Wcf_Web Services_Methods_Ping - Fatal编程技术网

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

C# 如何在不使用ping的情况下检查web服务是否已启动并运行?,c#,wcf,web-services,methods,ping,C#,Wcf,Web Services,Methods,Ping,如何检查web服务中的方法是否正常工作?我不能用ping。我仍然希望检查客户端从web服务调用的任何类型的方法。我知道很难一概而论,但应该有办法 只需在Web服务的方法中使用try-catch,并将异常记录到日志文件或事件日志中即可。 例如: 您不需要ping web服务,而是使用看门狗服务或其他东西ping服务器。没有必要“ping”Web服务。我也认为你不需要这么做。 由于代码不正确,您的Web服务要么可以正常工作,要么不能正常工作。您可以尝试curl。这是一个Linux工具,应该也在Cyg

如何检查web服务中的方法是否正常工作?我不能用ping。我仍然希望检查客户端从web服务调用的任何类型的方法。我知道很难一概而论,但应该有办法

只需在Web服务的方法中使用try-catch,并将异常记录到日志文件或事件日志中即可。 例如:

您不需要ping web服务,而是使用看门狗服务或其他东西ping服务器。没有必要“ping”Web服务。我也认为你不需要这么做。
由于代码不正确,您的Web服务要么可以正常工作,要么不能正常工作。

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

$ curl http://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
$curlhttp://google.com
301移动
301移动
文档已移动
.

有很多选择;示例可在“网络”中找到。

在我看来,您有两个选项:

  • 如果可以访问它运行的服务器,请记录每次调用(以及引发的异常)
    使用软件读取日志文件,该软件会在文件写入时更新

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


    • 您也可以使用跟踪


      我使用这种方法,效果很好:

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

      知道web服务方法是否工作“良好”的唯一方法是调用该方法,然后评估结果是否“良好”。如果您想保留“罚款”与时间的记录,那么您可以记录评估结果

      没有比这更通用的方法了。考虑:

    • 您可以使用代码创建到服务端点的HTTP连接,但成功不会告诉您服务是否会在您发送任何消息后立即抛出异常
    • 您可以连接并发送一条无效消息,但这并不能告诉您多少
    • 您可以连接并向其发送有效消息,然后检查结果以确保其有效。这将使您非常清楚,当一个真正的客户机随后立即调用该服务时,真正的客户机应该期望得到一个有效的结果
    • 除非服务把这当作一个崩溃的机会,只是为了激怒你
      最好的技术是使用WCF跟踪(可能带有消息级跟踪)来记录服务的实际情况,不管是好是坏。然后,人们可以查看日志,看看它们是否“良好”。

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

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

      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;
              }
          }
      

      到目前为止,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
      

      虽然日志记录通常是一个好主意,但只记录异常并没有帮助:我仍然希望检查客户端从web服务调用的任何类型的方法。希望他不会对Web服务的每个方法都抛出异常;)如果他可以写一个异常日志,他也可以在try括号中为stats写一个日志,我看没有问题。实际上是wierd-你想检查服务状态,但不想ping它。。意思是不想叫它。@alexanderb嗯。。。ping在这里不起作用,这就是我需要一个替代方法:)和任何其他调用和检查此web服务方法的方法都将不胜感激。@bebojoor这里有一个与此主题类似的问题:我建议您定期调用一个无害的服务方法,以验证web服务是否“正常”可能与hmmm重复?您的代码是否在检查任何web服务方法?我不想用卷发。。。我正在使用windows平台:)
      ComputerName     : 192.168.134.1
      RemoteAddress    : 192.168.134.1
      RemotePort       : 4407
      InterfaceAlias   : Ethernet0
      SourceAddress    : 192.168.134.1
      TcpTestSucceeded : True