Я использую службу WCF из приложения WP7. Оба находятся в одном решении VS. Все работало нормально, пока я не попытался вернуть FaultException.
При выдаче FaultException из моей службы WCF я получаю сообщение "Необработанное исключение типа 'System.ServiceModel.FaultException`1' произошло в System.ServiceModel.dll" в EndInvoke в моем прокси. Если я нажимаю продолжить, исключение не всплывает. Мой код обработчика никогда не срабатывает.
Кажется, у меня все правильно настроено. Я видел множество примеров, так как я провел целый день, прочесывая сеть для помощи в решении этой проблемы. Если я перестану выдавать FaultException, мое приложение будет работать нормально.
В диалоге VS Debug> Exceptions я попытался отключить FaultException и FaultException'1 в CLR / System.ServiceModel. Я также попытался перейти в меню «Инструменты»> «Параметры», «Отладка»> «Общие» и отключить «Включить помощник по исключениям» и «Включить только мой код (только управляемый)». Ни один из них не позволил исключительной ситуации всплыть на моем вызывающем методе в приложении. .
Код интерфейса -
[OperationContract]
[FaultContract(typeof(NotAuthorizedException))]
List<MyResult> GetValues(DateTime beginDate, DateTime endDate);
Тип исключения -
[DataContract]
public class NotAuthorizedException
{
[DataMember]
public string Message { get; set; }
}
Код сервера для выдачи исключения -
throw new FaultException<NotAuthorizedException>(
new NotAuthorizedException(),
new FaultReason("Not authorized."),
new FaultCode("Sender"));
Звонок клиента в службу WCF -
try
{
MyServiceClient myService = new MyServiceClient();
myService.GetValuesCompleted += new EventHandler<GetValuesCompletedEventArgs>(myService_GetValuesCompleted);
myService.GetValuesAsync(DateTime.Now, DateTime.Now.AddMonths(6));
}
catch (FaultException<NotAuthorizedException>)
{
//handle error here
}
Где он ломается (в Reference.cs) -
System.Collections.ObjectModel.ObservableCollection<Namespace.MyService.MyResult> _result = ((System.Collections.ObjectModel.ObservableCollection<Namespace.MyService.MyResult>)(base.EndInvoke("GetValues", _args, result)));
Прокси-код - это неизмененный код, сгенерированный из пункта меню «Добавить справочник услуг».
Это должно быть что-то простое, но я просто не вижу этого!