Non si può fare questo: servizi
- web fanno errori SOAP. Le eccezioni sono specifiche della piattaforma.
- Quando un'eccezione non è gestita in un servizio Web ASMX, .NET la tradurrà in un errore SOAP. I dettagli dell'eccezione non sono serializzati.
- In un client ASMX, un errore SOAP verrà tradotto in una SoapException.
I servizi Web ASMX non supportano correttamente gli errori SOAP. Non c'è modo di ottenere eccezioni se non una SoapException sul lato client.
Ancora un altro motivo per eseguire l'aggiornamento a WCF.
Come esempio di ciò che non può fare con ASMX, ecco come funziona WCF. WCF consente di specificare, per ogni operazione di servizio web, che i guasti si può tornare:
[ServiceContract]
public interface IMyServiceContract
{
[FaultContract(typeof(IntegerZeroFault))]
[FaultContract(typeof(SomeOtherFault))]
[OperationContract]
public string GetSomeString(int someInteger);
}
[DataContract]
public class IntegerZeroFault
{
[DataMember]
public string WhichInteger {get;set;}
}
[DataContract]
public class SomeOtherFault
{
[DataMember]
public string ErrorMessage {get;set;}
}
public class MyService : IMyServiceContract
{
public string GetSomeString(int someInteger)
{
if (someInteger == 0)
throw new FaultException<IntegerZeroFault>(
new IntegerZeroFault{WhichInteger="someInteger"});
if (someInteger != 42)
throw new FaultException<SomeOtherFault>(
new SomeOtherFault{ErrorMessage ="That's not the anaswer"});
return "Don't panic";
}
}
client A WCF può quindi catturare FaultException<SomeOtherFault>
, per esempio. Quando ho provato questo con un client Java, è stato in grado di catturare SomeOtherFault
, che IBM Rational Web Developer ha creato per derivare dalla classe Java Exception
.
fonte
2009-08-18 21:55:35
Sta usando ASMX. Lo chiama "ASP.NET Web Services" –
Ah ok .. pensavo stesse usando WCF –