Frage

Ich verstehe, dass WCF eine Ausnahme in einen Fehler konvertieren und zurück als SOAP-Nachricht senden, aber ich frage mich, ob dies wirklich interoperabel ist. Ich glaube, ich habe eine harte Zeit versucht, herauszufinden, dieses mögliche Szenario:

  1. Client (Java) ruft ein WCF-Dienst (LoginService).
  2. Server prüft, ob eine entsprechende Genehmigung, Benutzerautorisierung fehlschlägt.
  3. Server löst eine UnauthorizedAccessException.
  4. WCF wandelt diese in einen Fehler irgendwie. (* - siehe unten als auch)
  5. Client muss in der Lage sein zu wissen, wie diese Fehler zu lesen.

Ich glaube, ich bin nur eine harte Zeit zu verstehen, wie dies noch kompatibel sein könnte, weil es erwartet Java zu wissen, wie ein SOAP-Fehler zu übersetzen, dass .NET kodiert von einem UnauthorizedAccessException.

  • Auch wie funktioniert .NET tatsächlich die Ausnahme auf einen Fehler umwandeln, was mich als Fehlercode, Namen geht, usw. Einige der Dinge zu sein scheinen „duh“ s mag vielleicht die Fehlerbezeichnung ist „UnauthorizedAccessException“, aber ich möchte lieber wissen sicher, als Vermutung.
War es hilfreich?

Lösung

Es gibt keine „automatische Konvertierung“. WCF wird einen Fehler zurückgeben (ich vergessen welche), wenn Sie eine nicht behandelte Ausnahme haben. Aber da Sie nicht, dass Fehler erklären, viele, wenn nicht die meisten, werden die Kunden nicht, wenn Sie es zurück.

Sie sollen Ihre eigenen Fehler definieren und sie stattdessen zurückzukehren. Bedenken Sie:

[DataContract]
public class MySpecialFault
{
    public string MyMessage { get; set; }
}

[ServiceContract]
public interface IMyService
{
    [FaultContract(typeof (MySpecialFault))]
    [OperationContract]
    void MyOperation();
}

public class MyService : IMyService
{
    public void MyOperation()
    {
        try
        {
            // Do something interesting
        }
        catch (SomeExpectedException ex)
        {
            throw new FaultException<MySpecialFault>(
                new MySpecialFault {MyMessage = String.Format("Sorry, but {0}", ex.Message)});
        }
    }
}

Jeder Client fähig Fehler des Umgangs damit umgehen wird. Die WSDL wird definiert, um den Fehler, und sie werden einen Fehler mit dem Detail Elemente sehen eine serialisierte Version der MySpecialFault Instanz enthält, die gesendet wurde. Sie werden in der Lage, alle die Eigenschaften dieser Instanz zu lesen.

Andere Tipps

Störungen haben einen Teil der SOAP-Spezifikation seit v1.1 gewesen. Sie werden erklärt in der SOAP-Spezifikation .

Es ist bis zu Implementierungen (WCF, Java, etc.), um sicherzustellen, dass Störungen behandelt werden, gemäß der Spezifikation.

Da WCF FaultExceptions auf Fehler nach der SOAP-Spezifikation konvertiert, FaultExceptions von WCF geworfen interoperabel sind.

SOAP-Fehler sind interoperabel, aber .Net Ausnahmeklassen sind nicht gut in SOAP-Fehlern verwendet werden. Stattdessen definieren Sie Ihre eigene Klasse Datacontract (z AccessFault) und dann in einem FaultContract verwenden. finden Sie unter http://msdn.microsoft.com/en-us/library/ms733841. aspx

Wann immer es eine UnauthorizedAccessException an Service Grenze wandelt es in FaultException geworfen. Dies kann auf verschiedene Art und Weise wie mit Microsoft Enterprise Library Ausnahmebehandlung blockieren oder der Umsetzung der IErrorHandler Schnittstelle erfolgen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top