2014-11-25 4 views
0

Я новичок в WCF и пытаюсь создать демонстрационный проект WCF с привязкой WebHttpBinding.Чтобы получить исключение Fault на стороне клиента

Проекты работают нормально, но я придерживаюсь концепции исключения сбоя. Ниже приведен код, который я использую для генерации исключения, но на стороне клиента получается то, что я получаю: (400) Неверный запрос ошибка, а InnerException - null. Где я ошибаюсь?

public DataTable GetCreativesData(string id,string type) 
    { 
     try { 
     DataAccess da = new DataAccess(); 
     string qryStr = @"select * from dbo.tbMyTable"; 
     if (type != null && type != "") 
      qryStr += " WHERE1 type='"+type+"'"; 
     DataTable dt = da.GetDataTable(qryStr); 
     return dt; 
     } 

     catch (FaultException ex) { 
      throw new FaultException("Improper Query"); 
     } 
    } 
+0

Выбрасываете 'FaultException' из своей службы WCF? –

+0

Да .. я поднимаю его из службы WCF – Tweety01

ответ

0

Ошибка ошибки 400 для исключения ошибки, поскольку вы указываете пользователю, что что-то не так, вероятно, с тем, что они предоставили.

Там нет внутреннего исключения, когда вы поднимаете FaultException, так как основное понятие FaultException является то, что он работает по технологии (интероперабельность) & понятия внутреннего исключения очень специфично для .NET.

Если вы действительно хотите передать Exception, можете использовать FaultException, который позволяет указать общий параметр, а затем установить его на Exception. Тогда вы создадите и поднимите это.

Еще один аспект, который следует помнить - это то, как вы обрабатываете свои ошибки, в вашем коде вы бросаете совершенно новое исключение. Это означает, что вся информация в переменной ex, теряется. Если вы не намерены скрывать что-то, вы могли бы попробовать это

catch (FaultException ex) 
{ 
    throw; 
} 

Этот параметр имеет оригинальный FaultException и поднимает его снова, таким образом, сохраняя всю информацию в нем.

Наконец-то и вне вашего вопроса, что SQL пугает меня - похоже, он может быть уязвим для SQL injection attack - просто что-то, что вы можете проверить.

+0

спасибо за пояснение Роберт .. но что, если мне нужно показать фактическую ошибку пользователю .... вроде бы мы разделим операцию на обслуживание и если пользователь пропустит номер 0 .. .. then я хотел бы показать пользовательское сообщение пользователю ... и что SQL предназначен только для локального тестирования. – Tweety01

+0

Добавлена ​​информация о FaultException , которая может быть, что вы хотите –

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