2014-01-30 3 views
0

Возьмите следующую попытку поймать-заявление в WCF-ServiceSoapException Не Пойманный в попытке поймать

Try 
     'Here some method is being called. 
     Return myBs.PerformDailyUpdate() 

    Catch ex As Exception 'Exception is not being caught here 
     If service IsNot Nothing AndAlso service.HasWarnings Then 
      TextFileTracer.Write(String.Format("Warning in method: '{0}'.", name)) 
      TextFileTracer.Write(service.GetWarnings) 
     End If 
     Try 
      TextFileTracer.Write("Error in dbmanager: " & service.HasErrors.ToString) 
     Catch ex2 As Exception 
     End Try 
     TextFileTracer.Write(String.Format("Error in method: '{0}'.", name)) 
     TextFileTracer.Write(ex.Message & vbCrLf & ex.StackTrace) 
    End Try 
End Function 'Exception shows here while debugging 

В этом методе (PerformDailyUpdate) ASMX-Webservice (.Net 2.0) вызывается. Этот веб-сервис вызывает случайный код SOAPException, вызванный вызовом метода из этого webservice.yet каким-то образом это исключение SOAPException не обнаружено методом выше.

Мой вопрос: Почему не исключение SOAPException? Существуют ли какие-то характеристики, которые разделяют SOAP-Исключение из обычных «исключений», генерируемых (что, в свою очередь, не может быть уловлено)?

Примечание: Код, написанный здесь, не мой. Поэтому, пожалуйста, не судите меня на этом

ExceptionMessage (первая часть)

System.Web.Services.Protocols.SoapException: Unexpected application error: SqlException. 
    ADF.ExceptionHandling.GlobalExceptions.UnexpectedException: Unexpected application error: SqlException. 
    System.Data.SqlClient.SqlException: Incorrect syntax near ')'. 
    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) 
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 
    .... 

Благодаря

Scheme (how this clarifies the situation somewhat): 

Internal DailyTriggerMechanism -----> WCF - Service -----> ASMX-Webservice  ----> DB2/SQL 
            (Origin code above) (Exception being thrown) 

Внутри WCF-службы на данные ПОЛУЧАЛ манипулируют для заполнения конкретных таблиц , В этой ситуации AMSX-Webservice не может измениться.

+0

Является ли это случай, когда ошибка SOAP происходит на хосте, но вы пытаетесь поймать его на клиенте? Трудно сказать из описания. – Brian

+0

Я редактирую свой пост, чтобы прояснить ситуацию. – User999999

+0

Прежде всего, если вы используете ссылку на службу (и вы _should_), вы получите 'FaultException' или, может быть,' FaultException ', а не' SoapException'. Во-вторых, если 'catch (Exception ex)' не поймает исключение, то это означает, что исключение не было выбрано. –

ответ

2

Я думаю, что нормальное исключение должно быть в состоянии поймать эту необработанную ошибку, которую вы указали, но вы можете попробовать исключение SOAP и/или SQL-исключение в дополнение к вашему регулярному исключению.

Как:

try { 
    //your failing code 
} 
catch (SOAPException se) 
{ 
    //your response } 
catch (SQLException sqle) 
{ 
    //your response  
} 
catch (Exception e) 
{ 
    //your response  
} 
+0

Попробуем это сделать. Возможно, идиотский и/или глупый вопрос (просто хочу покрыть все мои базы здесь). У меня есть собственное исключение, унаследованное от SOAPException. Где его поймают? при вывозе мыла или исключении catch? – User999999

+0

Если это настраиваемое исключение, вам придется поймать конкретное исключение, которое они бросают, используя созданное ими определение исключения (класса). Это можно найти в DLL, которую они используют. Вам нужно будет ссылаться на него в своем проекте, чтобы использовать (улавливать) его. Но все, что наследуется от исключения базового класса (то, что они должны были бы сделать, если бы они создавали собственный класс исключений), должно быть уловимым обычной попыткой, зафиксировать статут с использованием Exception e. – Brian

+0

То же самое с пользовательским классом, который наследует SoapException. – Brian

Смежные вопросы