FaultException (Ausnahme durch den Dienst geworfen) wird vom Client Fang nicht gefangen (FaultException )

StackOverflow https://stackoverflow.com/questions/3032303

Frage

Ok, ich weiß, ich hier etwas fehle. Ich habe den folgenden Betrieb Vertrag:

public double DivideByZero(int x, int y)
{                   
    if (y == 0) 
    { 
        throw new FaultException<ArgumentException>
          (new ArgumentException("Just some dummy exception")
          ,new FaultReason("some very bogus reason"), new FaultCode("007"));
    }
    return x / y;
}

Und Folgendes wird vom Client genommen: -

  Console.WriteLine("Enter the x value");
  string x = Console.ReadLine();
  Console.WriteLine("Enter the Y value");
  string y = Console.ReadLine();
  try
  {
      double val = client.DivideByZero(Convert.ToInt32(x), Convert.ToInt32(y));
      Console.WriteLine("The result is " + val.ToString());
  }
  catch(FaultException<ArgumentException> exp)  
  {
      Console.WriteLine("An ArgumentException was thrown by the service "+ exp.ToString());    
  }
  catch (Exception exp)
  {
      Console.WriteLine(exp.ToString());
  }

Im obigen Fall catch (FaultException exp) (der erste catch-Block mit Argumente im Client-Code) Block ausgeführt nicht erhalten. Allerdings, wenn ich Argument entfernen catch (FaultException exp) zu haben, wird der gleiche catch-Block ausgeführt. Ich bin nicht sicher darüber, wie ich FaultException von meinem Betrieb Vertrag bin zu werfen. Bin ich fehlt hier nichts.

Schätzen Sie Ihre Hilfe, Ashish

EDIT: - Wenn ich den Dienstverweis in meinem Client aktualisiert, konnte ich die FaultException<ArgumentException> Ausnahme fangen

.
War es hilfreich?

Lösung

Versuchen Sie es mit FaultException<DataContract> für einige beliebigen Datenvertragstyp. Wenn Sie auf den generierten Code für die Fehler in der Proxy-Klasse aussehen, ich wette, Sie werden sehen, dass die ArgumentException nicht die Art und Weise ist die Serialisierung Sie es erwarten.

Andere Tipps

Wenn Sie Exception Klasse ableiten, stellen Sie sicher, dass Ihre benutzerdefinierte Ausnahme der Serialisierung hat Konstruktor

protected MyCustomException(
          SerializationInfo info,
          StreamingContext context)
            : base(info, context) { }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top