Как я тестирую возможность соединения к неизвестному веб-сервису в C#?

В моем понимании синхронизировано в основном означает, что компилятор пишет monitor.enter и monitor.exit вокруг вашего метода. Как таковой он может быть потокобезопасным в зависимости от того, как он используется (я имею в виду, что вы можете написать объект с синхронизированными методами, который не является потокобезопасным в зависимости от того, что делает ваш класс).

14
задан RichieACC 1 December 2008 в 10:46
поделиться

4 ответа

Вы правы, что проверка с помощью ping-запросов сервера не достаточна. Сервер может возрасти, но веб-сервис, недоступный из-за многих причин.

Для контроля наших соединений веб-сервиса я создал интерфейс IMonitoredService, который имеет метод CheckService (). Класс обертки для каждого веб-сервиса реализует этот метод для вызова безвредного метода на веб-сервисе и отчетов, если сервис закончился или нет. Это позволяет любому номеру служб контролироваться с кодом, ответственным за контроль, зная детали сервиса.

, Если Вы знаете немного о том, что веб-сервис возвратит из доступа к URL непосредственно, Вы могли попытаться просто использовать URL. Например, asmx файл Microsoft возвращает сводку веб-сервиса. Другие реализации могут вести себя по-другому все же.

7
ответ дан 1 December 2019 в 12:14
поделиться

Подсказка: создайте интерфейс/базовый класс с методом "InvokeWithSomeParameters". Значение "SomeParameters" должно быть "параметрами, который 100% не влияет ни на какое важное состояние".

я думаю, существует 2 случая:

  • Простой веб-сервис, который не влияет ни на какие данные по серверу. Например: GetCurrentTime (). Этот веб-сервис можно назвать без параметров.
  • Сложный веб-сервис, который может влиять на некоторый daty на сервере. Например: Включите в список незаконченные задачи. Вы параметр заполнения со значениями, которые 100% выдают исключение (resp. не изменяет влияние незаконченные задачи), если Вы получили некоторое исключение как "ArgumentException", Вы знаете, что сервис жив.

я не думаю, это - самое ясное решение, но оно должно работы.

1
ответ дан 1 December 2019 в 12:14
поделиться

Как насчет того, чтобы открытие соединение TCP/IP с портом используется веб-сервисом? Если соединение работает, соединение RAS, остальная часть сети и хоста все работает. Веб-сервис почти наверняка работает также.

0
ответ дан 1 December 2019 в 12:14
поделиться

Вы можете попробовать следующее, чтобы проверить существование веб-сайта:

public static bool ServiceExists(
    string url, 
    bool throwExceptions, 
    out string errorMessage)
{
    try
    {
        errorMessage = string.Empty;

        // try accessing the web service directly via it's URL
        HttpWebRequest request = 
            WebRequest.Create(url) as HttpWebRequest;
        request.Timeout = 30000;

        using (HttpWebResponse response = 
                   request.GetResponse() as HttpWebResponse)
        {
            if (response.StatusCode != HttpStatusCode.OK)
                throw new Exception("Error locating web service");
        }

        // try getting the WSDL?
        // asmx lets you put "?wsdl" to make sure the URL is a web service
        // could parse and validate WSDL here

    }
    catch (WebException ex)
    {   
        // decompose 400- codes here if you like
        errorMessage = 
            string.Format("Error testing connection to web service at" + 
                          " \"{0}\":\r\n{1}", url, ex);
        Trace.TraceError(errorMessage);
        if (throwExceptions)
            throw new Exception(errorMessage, ex);
    }   
    catch (Exception ex)
    {
        errorMessage = 
            string.Format("Error testing connection to web service at " + 
                          "\"{0}\":\r\n{1}", url, ex);
        Trace.TraceError(errorMessage);
       if (throwExceptions)
            throw new Exception(errorMessage, ex);
        return false;
    }

    return true;
}
16
ответ дан 1 December 2019 в 12:14
поделиться
Другие вопросы по тегам:

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