Вопрос по wcf, web-services, c# – Как проверить, работает ли веб-сервис без использования ping?

10

Как я могу проверить, работает ли метод в веб-сервисе нормально или нет? Я не могу использовать пинг. Я все еще хочу проверить любой метод, вызываемый клиентом из веб-службы. Я знаю, что это сложно обобщить, но должен быть какой-то путь.

это на самом деле странно - вы хотите проверить состояние сервиса, но не хотите пинговать его ... значит, не хотите его вызывать. Alexander Beletsky
@bebojoor есть похожий вопрос к этой теме здесь:stackoverflow.com/questions/10088950/… Я рекомендую вам периодически вызывать безобидный метод обслуживания, чтобы убедиться в том, что веб-служба работает. Nick Ryan
Возможный дубликатC#: How to programmatically check a web service is up and running? bummi
@alexanderb хммм ... ping здесь не работает, вот если мне нужна альтернатива :) и любой другой метод для вызова и проверки этого метода веб-службы был бы оценен. bebojoor

Ваш Ответ

8   ответов
1

конечная точка веб-сервиса.

Используйте следующее выражение:

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
4

работает ли метод веб-службы "хорошо" вызывать метод и затем оценивать, является ли результат «точным». Если вы хотите сохранить запись "хорошо" В зависимости от времени, вы можете записать результат оценки.

Нет более общего способа сделать это, который имеет какой-либо смысл. Рассматривать:

You could have code that creates an HTTP connection to the service endpoint, but success doesn't tell you whether the service will immediately throw an exception as soon as you send it any message. You could connect and send it an invalid message, but that doesn't tell you much. You could connect and send it a valid message, then check the result to ensure that it is valid. That will give you a pretty good idea that when a real client calls the service immediately afterwards, the real client should expect a valid result. Unless the service takes that as an opportunity to crash, just to spite you!

Лучшим методом было бы использовать трассировку WCF (возможно, с трассировкой на уровне сообщений) для регистрации того, что на самом деле происходит со службой, хорошо это или плохо. Затем человек может просмотреть журналы, чтобы убедиться, что они «в порядке».

1

что вам нужно, затем посмотрите на эти 2 статьи:

C #: Как программно проверить работоспособность веб-службы?

проверить, работает ли веб-сервис - эффективно

РЕДАКТИРОВАТЬ: Это была моя реализация в аналогичном сценарии, где мне нужно знать, существует ли внешняя служба каждый раз перед выполнением вызова:

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

те исключения в файл журнала или в журнал событий. Пример:

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

Вам не нужно пропинговать веб-сервис, а вместо этого пинговать сервер с помощью сторожевого сервиса или чего-то еще. Нет необходимости "пинговать" веб-сервис. Я также думаю, что вам все равно не нужно этого делать. Либо ваш веб-сервис работает, либо не работает из-за плохого кода.

Error: User Rate Limit ExceededI still want to check any kind of method being invoked from the web service by the clientError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

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>

Есть много вариантов; примеры можно найти в сети.

хммм? Ваш код проверяет какой-либо метод веб-сервиса вообще? Я не хочу использовать CURL ... и я использую платформу Windows :) bebojoor
Также имеется порт win32 для curl -curl.haxx.se/download.html
0

If you can access the server it is running on, Log every call (and exceptions thrown).
Read the log file with a soft like baretail that updates as the file is being written.

If you can't access the server, then you have to make the webservice write that log remotely to another computer you have access to.
Popular loggers have this functionality built in. (Log4Net, ...)

3

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

Похожие вопросы