Próbuję wymyślić prosty, łatwy w użyciu wzorca projektowego za obsługę w usłudze .net wcf silverlight (konkretnie włączona usług WCF) błędu. Jeśli wyjątek zostanie zgłoszony w metodzie serwisowej, aplikacja silverlight zobaczy komunikat CommunicationException stwierdzający "Serwer zdalny zwrócił błąd: NotFound --->" i prawdopodobnie ślad stosu w zależności od ustawień, co jest całkowicie nieprzydatne, ponieważ nie robi tego ". t powiedzieć rzeczywisty błąd, a zwykle prawdziwy błąd nie jest "NotFound"..Net WFC/serwis internetowy obsługa wyjątków wzornictwo
czytania na usługach internetowych i usług WCF i wyjątki, trzeba wyrzucić mydło/WCF standardowych wyjątkami takimi jak FaultException lub SoapException. Tak więc dla usługi wcf należy zawijać każdą metodę w próbie catch, przechwycić każdy wyjątek, zawinąć go w wyjątek FaultException i rzucić. Przynajmniej to jest moje zrozumienie, popraw mnie, jeśli się mylę.
Więc stworzyłem mój projekt wzoru:
[ServiceContract(Namespace = "http://MyTest")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class DataAccess
{
/// <summary>
/// Error class, handle converting an exception into a FaultException
/// </summary>
[DataContractAttribute]
public class Error
{
private string strMessage_m;
private string strStackTrace_m;
public Error(Exception ex)
{
this.strMessage_m = ex.Message;
this.strStackTrace_m = ex.StackTrace;
}
[DataMemberAttribute]
public string Message
{
get { return this.strMessage_m; }
set { this.strMessage_m = value; }
}
[DataMemberAttribute]
public string StackTrace
{
get { return this.strStackTrace_m; }
set { this.strStackTrace_m = value; }
}
//Convert an exception into a FaultException
public static void Throw(Exception ex)
{
if (ex is FaultException)
{
throw ex;
}
else
{
throw new FaultException<Error>(new Error(ex));
}
}
}
[OperationContract]
[FaultContract(typeof(Error))]
public void TestException()
{
try
{
throw new Exception("test");
}
catch (Exception ex)
{
Error.Throw(ex);
}
}
}
tak aby długie opowiadanie, ja wciąż nie prawidłowy błąd w mojej aplikacji Silverlight. Sprawdzam obiekt AsyncCompletedEventArgs.Error i nadal zawiera obiekt CommunicationException z ogólnym błędem. Pomóż mi wymyślić ładny prosty wzór, który pozwoli mi z łatwością rzucić poprawny wyjątek z usługi i łatwo go złapać w aplikacji.
Podobnie jak sugestię, nie wypełniaj swojego kodu komentarzami. Ponieważ SO pozwala na mieszanie kodu i tekstu, użyj go, aby ludzie nie musieli przeglądać względnie małego bloku kodu, aby zobaczyć, co robisz. –