На сервере я выкидываю исключение, подобное этому.
catch(SqlException exception)
{
if (exception.Message.Contains("Custom error from stored proc"))
{
//Exception to be thrown when authentication fails.
throw new FaultException<MyServiceFault>(new MyServiceFault { MessageText = exception.Message });
}
}
И на стороне клиента я ловлю исключение
catch(FaultException<MyServiceFault> faultException)
{
}
Вот мой MyServiceFault
[DataContract]
public class MyServiceFault
{
[DataMember]
public string MessageText { get; set; }
[DataMember]
public Guid Id { get; set; }
}
Проблема в том, что на клиенте он не переходит в блок перехвата MyServiceFault, а переходит в блок перехвата исключения связи и выдает эту ошибку
System.ServiceModel.CommunicationException: The underlying connection was closed: The connection was closed unexpectedly. ---> System.Net.WebException
Я также украсил свой метод обслуживания [FaultContract(typeof(MyServiceFault))]
в интерфейсе, который реализован моим сервисом.
В моем web.config теге servicebehaviour состоит
<serviceDebug includeExceptionDetailInFaults="true" />
Любая идея, где я иду не так.
Эта проблема возникает в Windows 7. Может ли быть причина, связанная с этим?
ВАЖНОЕ ОБНОВЛЕНИЕ
Согласно ответчикам, любое необработанное исключение на сервере может вызвать выброс исключения Communication на стороне клиента, и оно может не иметь никакого отношения к пользовательскому исключению сбоя, которое вы сгенерировали на сервере. Таким образом, решение состоит в том, чтобы зарегистрировать ошибки на сервере и найти, какая ошибка вызывает такое поведение. Вот очень полезная функция ведения журнала с открытым исходным кодом, которую я нашел и реализовал, которая может быть даже более полезной после того, как ваш проект перейдет в производственную среду. Большое спасибо ответчикам.
Лучший способ регистрации исключений в WCF