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

hvvq6cgz  于 2023-10-24  发布在  其他
关注(0)|答案(9)|浏览(134)

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

gpnt7bae

gpnt7bae1#

我使用这个方法,它工作得很好:

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

e4eetjau2#

要知道Web服务方法是否“正常”工作,唯一的方法是调用该方法,然后评估结果是否“正常”。如果您想保留“正常”与时间的记录,则可以记录评估结果。
没有比这更通用的方法了。考虑一下:
1.您可以使用创建到服务端点的HTTP连接的代码,但是成功并不能告诉您服务是否会在您向其发送任何消息时立即抛出异常。
1.您可以连接并向它发送一条无效消息,但这并不能说明什么。
1.您可以连接并发送一条有效的消息,然后检查结果以确保它是有效的。这将使您给予一个很好的想法,即当一个真实的客户端随后立即调用该服务时,该真实的客户端应该期望一个有效的结果。
1.除非服务把这当作一个崩溃的机会,只是为了气你!
最好的技术是使用WCF跟踪(可能使用消息级跟踪)来记录服务实际发生的事情,无论是好的还是坏的。

qfe3c7zg

qfe3c7zg3#

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
gudnpqoy

gudnpqoy4#

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

[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 webservice,而是用看门狗服务或其他东西ping服务器。没有必要“ping”webservice。我也认为你不需要这样做。要么你的webservice工作,要么它不工作,因为代码不好。

sd2nnvve

sd2nnvve5#

你可以试试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>

有很多选择;例子可以在'net中找到。

ryhaxcpt

ryhaxcpt6#

你可以自己编写一个小工具或Windows服务或任何你需要的东西,然后看看这2篇文章:
C#: How to programmatically check a web service is up and running?
check to if web-service is up and running - efficiently
编辑:这是我在一个类似场景中的实现,在这个场景中,我需要在每次调用之前知道外部服务是否仍然存在:

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

i34xakig7#

在我看来你有两个选择

  • 如果你可以访问它运行的服务器,记录每个调用(和抛出的异常)。

使用像baretail这样的软件读取日志文件,该软件会在写入文件时进行更新。

  • 如果您无法访问服务器,则必须让Web服务将该日志远程写入您有权访问的另一台计算机。

流行的记录器内置了此功能。(Log4Net,.)

np8igboo

np8igboo9#

如果您想要常规的控制服务,可以搜索相关平台,可以尝试https://fullcheck.app,它可以跟踪SLA。

相关问题