Я выбрасываю исключение в сервисе с поддержкой Silverlight и ловлю его в моем клиенте Silverlight.Я сделал все в соответствии с руководством, но все еще получаю то, что я считаю неожиданным поведением.
Код от клиента
try
{
client.ThrowFaultExceptionCompleted += (s, args) =>
{
DoCallback(args);
};
client.ThrowFaultExceptionAsync(new ThrowFaultExceptionRequest());
}
catch (FaultException<MyFaultException> myFex)
{
}
catch (FaultException fex)
{
}
Вот код из службы
Класс My Custom Fault Exception
[DataContract]
public class MyFaultException
{
private string _reason;
private string _myExceptionStackTrace;
[DataMember]
public string Reason
{
get { return _reason; }
set { _reason = value; }
}
[DataMember]
public string MyExceptionStackTrace
{
get { return _myExceptionStackTrace; }
set { _myExceptionStackTrace = value; }
}
}
Бит кода на стороне обслуживания, который генерирует исключение ошибки.В целях тестирования я вызываю этот метод из клиента.
[OperationContract]
[FaultContract(typeof(MyFaultException))]
public void ThrowFaultException()
{
MyFaultException mfex = new MyFaultException();
mfex.Reason = "No Reason!";
mfex.MyExceptionStackTrace = "Long stack trace here";
System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
//throw new FaultException<MyFaultException>(mfex ,new FaultReason(new FaultReasonText("My Fault Reason Text here!")), new FaultCode("my fault code here"));
throw new FaultException<MyFaultException>(mfex);
}
независимо от того, выбрасываю ли я FaultException с одним параметром или с этими тремя параметрами в строке комментария, я получаю сообщение об ошибке в моем файле Reference.csв прокси-классе silverlight, подобном приведенному ниже
, и он никогда не подходит ни к одному из блоков catch .. Это нормальное поведение?Теперь я должен отловить ошибку в методе обратного вызова DoCallback (args) и в этом методе проверить наличие (args.Error == null).Почему блок захвата не получил удар?
Спасибо за ваше время ...