Bạn không thể làm điều này: Dịch vụ
- Web làm những lỗi SOAP. Ngoại lệ là nền tảng cụ thể.
- Khi ngoại lệ được giải thể trong dịch vụ web ASMX, .NET sẽ dịch nó thành lỗi SOAP. Các chi tiết của ngoại lệ không được đăng.
- Trong máy khách ASMX, lỗi SOAP sẽ được dịch sang SoapException.
Dịch vụ web ASMX không có hỗ trợ thích hợp cho lỗi SOAP. Không có cách nào để có được bất kỳ ngoại lệ nào khác ngoài SoapException ở phía máy khách.
Tuy nhiên, một lý do khác để nâng cấp lên WCF.
Như một ví dụ về những gì bạn không có thể làm với ASMX, dưới đây là cách WCF hoạt động. WCF cho phép bạn chỉ định, đối với mỗi hoạt động dịch vụ web, mà lỗi nó có thể trở lại: sau đó
[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";
}
}
Một WCF khách hàng có thể bắt FaultException<SomeOtherFault>
, ví dụ. Khi tôi đã thử điều này với một khách hàng Java, nó đã có thể bắt SomeOtherFault
, mà IBM Rational Web Developer được tạo ra để lấy được từ lớp Java Exception
.
Nguồn
2009-08-18 21:55:35
Anh ấy đang sử dụng ASMX. Ông gọi nó là "Dịch vụ Web ASP.NET" –
Ah ok .. tôi nghĩ rằng ông đã sử dụng WCF –