Pertanyaan Mendapatkan pengecualian sebenarnya dari FaultException <>


Saya menangkap FaultException saat memanggil API layanan, mis.

catch(FaultException<MyCustomEx> e)
{
    // How do I get the MyCustomEx object here?
}

Saya ingin memanggil beberapa metode di MyCustomEx objek yang tertanam di dalamnya.

e.getTheActualExc().getMyCustomErrorCode();

Bagaimana cara mendapatkan objek yang sebenarnya?


5
2018-05-30 13:21


asal


Jawaban:


Menurut

http://msdn.microsoft.com/ru-ru/library/ms576199(v=vs.110).aspx

Properti yang dibutuhkan adalah Detail:

try {
  ...
}
catch(FaultException<MyCustomEx> e) {
  MyCustomEx detail = e.Detail;
  ...
}

Atau, jika Anda harus menangkapnya FaultException kelas, dapat Anda gunakan Refleksi:

  try {
    ...
  }
  catch (FaultException e) {
    PropertyInfo pi = e.GetType().GetProperty("Detail");

    if (pi != null) {
      Object rawDetail = pi.GetValue(e); 

      MyCustomEx detail = rawDetail as MyCustomEx;

      if (detail != null) {
        ...
      }
      ...
    }
    ...
  }

6
2018-05-30 13:27



properti eDetail akan memberi Anda objek FaultException <>, lihat MSDN.


2
2018-05-30 13:27



var serviceFault = exc as FaultException<ExceptionDetail>;

        if (serviceFault != null)
        {
            if (serviceFault.Detail.Type.Equals(typeof(TimeoutException).FullName))
            {

            }
            else if serviceFault.Detail.Type.Equals(typeof(EndpointNotFoundException).FullName))
            {

            }
            .....
        }

Ini adalah contoh dari apa yang saya gunakan. Anda dapat mengakses jenisnya Detail


1
2018-05-30 13:27