Nie możesz tego zrobić: Usługi
- sieci Błędy zrobić mydło. Wyjątki są specyficzne dla platformy.
- Gdy wyjątek jest nieobsługiwany w usłudze internetowej ASMX, .NET przetłumaczy go na błąd SOAP. Szczegóły wyjątku nie są serializowane.
- W kliencie ASMX błąd SOAP zostanie przetłumaczony na wyjątek SoapException.
Usługi sieciowe ASMX nie mają odpowiedniego wsparcia dla błędów SOAP. Nie ma sposobu, aby uzyskać wyjątek inny niż wyjątek SoapException po stronie klienta.
Kolejny powód do aktualizacji do WCF.
Jako przykład co nie można zrobić z ASMX, oto jak działa WCF. WCF umożliwia określenie, dla każdej operacji usług internetowych, które błędy mogą go zwrócić:
[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";
}
}
WCF klient może wtedy złapać FaultException<SomeOtherFault>
, na przykład. Kiedy wypróbowałem to z klientem Java, udało mu się złapać SomeOtherFault
, stworzone przez IBM Rational Web Developer, aby wywodziło się z klasy Java Exception
.
Używa ASMX. Nazwał to "ASP.NET Web Services" –
Ach ok .. Myślałem, że był przy użyciu WCF –