2016-06-13 6 views
0

Ich habe einen WCF-Dienst, dass ich die folgende Art und Weise nennen:Bereitstellung Ausfallstatus für WCF-Dienst

MyService client = new MyService(); 
bool result = client.MyServiceMethod(param1, param2); 

Variable Ergebnis wird auf wahr oder falsch Erfolg oder Misserfolg anzuzeigen. Im Erfolgsfall ist es klar, aber im Falle eines Fehlers muss ich einige Details darüber herausfinden, was fehlgeschlagen ist.

Von meinem Dienst verwende ich

OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse; 
response.StatusCode = HttpStatusCode.BadRequest; 
response.StatusDescription = "Invalid parameter."; 
return false; 

Meine Frage ist, wie kann ich die Antwort Beschreibung abrufen und ist, dass der richtige Weg, Versagen, Feedback zu geben?

Antwort

0

IMO ist es am besten, eine benutzerdefinierte Klasse zu definieren, die Sie dann wieder aus deine Methode. Diese Klasse würde die Details von Fehlern enthalten. Sie tun dies mit DataContracts.

Ein vereinfachtes Beispiel könnte so etwas wie dieses ...

[ServiceContract] 
public interface IMyContract 
{ 
    [OperationContract] 
    MyResult DoSomething(); 
} 

[DataContract] 
public class MyResult 
{ 
    [DataMember] 
    public bool IsSuccess { get; set; } 

    [DataMember] 
    public string ErrorDetails { get; set; } 
} 


public class MyService : IMyContract 
{ 
    public MyResult DoSomething() 
    { 
     try 
     { 
      return new MyResult { IsSuccess = true }; 
     } 
     catch 
     { 
      return new MyResult { IsSuccess = false, ErrorDetails = "Bad things" }; 
     } 
    } 
} 

EDIT: Einschließlich Code pro Kommentar raubend.

var client = new MyService(); 
var results = client.DoSomething(); 

if (results.IsSuccess) 
{ 
    Console.WriteLine("It worked"); 
} 
else 
{ 
    Console.WriteLine($"Oops: {results.ErrorDetails}"); 
} 
+0

Wie würde ich dann die Details aus dem aufrufenden Programm abrufen? Objektergebnis = client.MyServiveMethod (param1, param2); würde nicht funktionieren – ElenaDBA

+0

Details zum Beitrag hinzugefügt. Lass es mich wissen, falls du fragen hast. –

0

Im Allgemeinen kommunizieren Sie Probleme an den Client (s) mit SOAP MSDN:Faults. Besonderer Vorteil von Fehlern ist, dass WCF dafür sorgt, dass Ihr Kanal nach dem Empfang einer Fehlermeldung geöffnet bleibt. Standardmäßig sendet der Dienst keine Informationen, die erklären, was passiert ist. WCF gibt keine Details darüber an, was der Dienst intern tut. Weitere Informationen finden Sie unter MSDN:Specifying and Handling Faults in Contracts and Services. Siehe auch SO:What exception type should be thrown with a WCF Service?

Für Debugging-Zwecke Sie ServiceDebug Verhalten hinzufügen und setzen IncludeExceptionDetailInFaults auf true die Stack-Trace zu erhalten (in Nicht-Produktionsumgebungen)