Как выбросить FaultException из службы wcf на собственном хостинге?

Я планирую разместить службу в службе Windows, но думаю о проблеме, описанной в заголовке. У кого-нибудь была подобная проблема? Спасибо

Обновлять

Проблема в том, что когда вы генерируете исключение в приложении WinForms / WPF / Win Service, программа дает сбой, и вам придется перезапустить ее.


person Davita    schedule 09.04.2011    source источник
comment
Может быть, вы могли бы уточнить, в чем на самом деле проблема.   -  person Sasha Goldshtein    schedule 09.04.2011
comment
Вы пытаетесь создать новое исключение в качестве ответа на какое-то правило проверки в своей службе, ожидая, что клиент его поймает и обработает?   -  person Larry    schedule 09.04.2011
comment
вы пробовали поймать блок (FaultException)?   -  person    schedule 09.04.2011
comment
@Laurent да, это то, что я пытаюсь сделать. Я мог бы разместить службу в IIS, но это затруднило бы развертывание. Если возможно добиться того, чего я хочу, я предпочитаю службу Windows   -  person Davita    schedule 09.04.2011
comment
Здесь задается тот же вопрос: stackoverflow.com/questions/1369882/ - Они говорят о веб-службе WCF. Вы делаете это так, как объясняется в этом ответе? stackoverflow.com/questions/1369882/   -  person Larry    schedule 09.04.2011


Ответы (2)


Исключение не всегда приводит к сбою вашего сервера. Даже неожиданное исключение на стороне сервера будет передано клиенту. Однако это считается более серьезным, чем ожидалось, и вызывает нарушение канала.

Основная идея состоит в том, чтобы включить ожидаемые исключения (ошибки) в ваши интерфейсные контракты. Есть много способов сделать это, вот вводная статья .

И, конечно, вам нужна достойная обработка исключений на сервере.

person Henk Holterman    schedule 09.04.2011
comment
Хм, в этой статье упоминается, что нужно перехватить исключение и выбросить FaultException (которое не обрабатывается с помощью try catch). На самом деле это то, что я хочу сделать, но разве это не приведет к сбою службы? Я думаю, единственный способ - поймать FaultException после того, как оно будет перенаправлено клиенту. Вы знаете, как это сделать? Благодарность - person Davita; 10.04.2011
comment
Просто попробуйте. WCF закодирует его и снова вызовет на клиенте. - person Henk Holterman; 10.04.2011

Вы можете попробовать перехватить любые исключения, подключившись к событию ThreadException в точке входа главного метода вашего хост-приложения, чтобы проверить, является ли это исключением FaultException.

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());

        // Hook to this event below
        Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
    }

    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
        if (e.Exception is FaultException)
            return; // Bypass FaultExceptions;
        else
            throw e.Exception; // Throw otherwise
    }
}
person Larry    schedule 09.04.2011