Я хотел бы включить исключение пользователя в исключение FaultContract из WCF. В моем приложении WCF я хотел бы инкапсулировать экземпляр Exception/экземпляр исключения UserDefine в FaultContract. Пожалуйста, найдите мое нижнее исключение UserDefine.Как включить фактическое исключение или пользовательское исключение в FaultContract из WCF
public class UserExceptions : Exception
{
public string customMessage { get; set; }
public string Result { get; set; }
public UserExceptions(Exception ex):base(ex.Message,ex.InnerException)
{
}
}
public class RecordNotFoundException : UserExceptions
{
public RecordNotFoundException(Exception ex): base(ex)
{
}
}
public class StoreProcNotFoundException : UserExceptions
{
public string innerExp { get; set; }
public StoreProcNotFoundException(Exception ex,string innerExp)
: base(ex)
{
this.innerExp = innerExp;
}
}
[DataContract]
public class ExceptionFault
{
[DataMember]
public UserExceptions Exception { get; set; }
public ExceptionFault(UserExceptions ex)
{
this.Exception = ex;
}
}
И я бросить исключение в службы, как показано ниже
try
{
//Some Code
//Coding Section
throw new RecordNotFoundException(new Exception("Record Not Found"));
//Coding Section
}
catch (RecordNotFoundException rex)
{
ExceptionFault ef = new ExceptionFault(rex);
throw new FaultException<ExceptionFault>(ef,new FaultReason(rex.Message));
}
catch (Exception ex)
{
throw new FaultException<ExceptionFault>(new ExceptionFault((UserExceptions)ex),new FaultReason(ex.Message));
}
попытка блок поймать CustomException (RecordNotFoundException), но не в состоянии послать это исключение к клиенту.
Спасибо Glen за ваш быстрый ответ, однако Я хотел бы включить оригинальное исключение в свой FaultContract (MathFault в вашем примере), чтобы клиент мог получить фактическое исключение и другие пользовательские данные, такие как Operation and Problem. – Sourabh
Короче говоря, я хотел бы сериализовать фактическое исключение и отправить его клиенту через провод. – Sourabh
@ Сураб Ах, я вижу. С помощью службы SOAP вы можете передавать только пользовательские типы, о которых клиент знает через DataContract. Добавление атрибута KnownType может помочь в этом. –