необработанное исключение заставит сервис WCF отказать?

test1.characters.count

даст вам количество букв / цифр и т. Д. В вашей строке.

ex:

test1 = "StackOverflow"

print(test1.characters.count)

( печатает " 13 ")

7
задан jessehouwing 29 December 2016 в 20:24
поделиться

5 ответов

Да, необработанное исключение в потоке приведет к остановке процесса.

Этот процесс завершится аварийно:

static void Main(string[] args)
{
    Thread t = new Thread(() =>
    {
        throw new NullReferenceException();
    });
    t.Start();
    Console.ReadKey();
}

Это не будет:

static void Main(string[] args)
{
    Thread t = new Thread(() =>
    {
        try
        {
            throw new NullReferenceException();
        }
        catch (Exception exception)
        {
            Console.WriteLine(exception.ToString());
        }
    });
    t.Start();
    Console.ReadKey();
}
11
ответ дан 6 December 2019 в 05:01
поделиться

Если вы не обрабатываете исключение, оно передается в операционную систему и отвечает, убивая любое приложение, вызвавшее исключение.

Почему бы вам просто не добавить try / catch для обработки исключений, чтобы ваша служба не была убита?

3
ответ дан 6 December 2019 в 05:01
поделиться

Необработанное исключение на стороне службы вызовет "сбой" канала (соединение между клиентом и сервером) - например, разрыв.

С этого момента вы больше не можете звонить из клиента, используя тот же экземпляр объекта прокси-клиента - вам придется заново создать прокси-клиент.

Лучше всего обрабатывать все ошибки на стороне сервера, когда это возможно. Ознакомьтесь с интерфейсом IErrorHandler , который вы должны реализовать в своем классе реализации службы, чтобы превратить все необработанные исключения .NET в либо ошибки SOAP (которые НЕ приведут к отказу канала), или сообщить / проглотить их полностью.

Марк

18
ответ дан 6 December 2019 в 05:01
поделиться

Если у вас нет надлежащей обработки ошибок, это приведет к сбою программы. Хорошей практикой является размещение блока

try{//do something
}
catch{ //handle errors
}
finally{//final clean up
}

в вашем коде, чтобы убедиться, что в случае возникновения исключения исключение должно быть корректно обработано. примеры на http://msdn.microsoft.com/en-us/library/fk6t46tz (VS.71) .aspx

1
ответ дан 6 December 2019 в 05:01
поделиться

Поведение среды выполнения WCF по умолчанию - проглотить все исключения, кроме нескольких типов. Таким образом, если ваш код выбросит исключение в стек во время выполнения WCF (например, если вы выбрасываете из операции WCF), это НЕ приведет к аварийному завершению работы приложения (если только оно не будет считаться "фатальным" исключением, таким как OOM, SEHException и т.д.). Если исключение не является частью контракта об ошибке операции, то канал будет неисправен, в противном случае нет.

Если время выполнения WCF не находится под вашим кодом на стеке, то исключение / будет/ приведет к аварийному завершению процесса.

Это похоже на время выполнения ASP.NET.

Если вы хотите просмотреть исключения, вытекающие из операций WCF в общем виде, то я рекомендую использовать интерфейс IOperationInvoker. Вы также можете использовать IErrorHandler, но ваша реализация IErrorHandler будет уведомлена об исключениях, отличных от тех, которые выбрасываются из "кода пользователя" (операции WCF), таких как SocketAbortedExceptions на внутренних потоках ввода/вывода WCF, которые, вероятно, вас не интересуют

.
7
ответ дан 6 December 2019 в 05:01
поделиться
Другие вопросы по тегам:

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