Domanda

capisco che WCF convertirà un'eccezione in un guasto e rinviarlo come un messaggio SOAP, ma mi chiedevo se questo è veramente interoperabile. Credo che sto avendo un momento difficile cercando di capire questo possibile scenario:

  1. client (Java) chiama un servizio WCF (LoginService).
  2. controlli Server per la debita autorizzazione, l'autorizzazione utente non riesce.
  3. Server genera un UnauthorizedAccessException.
  4. WCF converte in un guasto in qualche modo. (* - vedi sotto pure)
  5. Client deve essere in grado di saper leggere questo errore.

Credo che sto solo avere un momento difficile capire come questo potrebbe ancora essere interoperabili perché si aspetta Java per sapere come tradurre un errore SOAP che .NET codifica da un UnauthorizedAccessException.

  • Inoltre, come fa .NET effettivamente convertire l'eccezione di un guasto, ciò che accade in quanto il codice di errore, nome, ecc Alcune delle cose sembrano essere "duh" s piace forse il nome di errore è "UnauthorizedAccessException", ma preferirei so per certo di indovinare.
È stato utile?

Soluzione

Non v'è alcuna "conversione automatica". WCF restituirà un errore (non ricordo quale) quando si dispone di un'eccezione non gestita. Ma dal momento che non ha dichiarato che colpa, molti, se non la maggior parte, i clienti falliranno se lo restituite.

hanno lo scopo di definire i propri difetti e tornare loro invece. Prendere in considerazione:

[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)});
        }
    }
}

Tutti i client in grado di gestire i guasti si occuperà di questo. WSDL definirà il guasto, e vedranno un guasto con l'elemento Particolare contenente una versione serializzata dell'istanza MySpecialFault che è stato inviato. Saranno in grado di leggere tutte le proprietà di tale istanza.

Altri suggerimenti

I guasti sono stati parte della specifica SOAP dal v1.1. Essi sono spiegati nel SOAP Specification .

E 'fino a implementazioni (WCF, Java, ecc) al fine di garantire che gli errori vengono gestiti in base alle specifiche.

Da WCF converte FaultExceptions di errori secondo la specifica SOAP, FaultExceptions gettati da WCF interoperabilità.

errori SOAP sono interoperabili, ma classi di eccezioni Net non sono buone per essere utilizzato in errori SOAP. Invece di definire la propria classe DataContract (ad esempio AccessFault) e poi utilizzarlo in un FaultContract. vedi http://msdn.microsoft.com/en-us/library/ms733841. aspx

Ogni volta che c'è un UnauthorizedAccessException gettato al servizio convertito confine a FaultException. Questo può essere fatto in diversi modi come l'utilizzo di Microsoft Enterprise Library Gestione delle eccezioni di blocco o l'implementazione dell'interfaccia IErrorHandler.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top