Dot-Net
如何從 ASP.NET 中的肥皂異常中提取內部異常?
我有一個像這樣的簡單 Web 服務操作:
[WebMethod] public string HelloWorld() { throw new Exception("HelloWorldException"); return "Hello World"; }然後我有一個使用 Web 服務然後呼叫操作的客戶端應用程序。顯然它會拋出一個異常:-)
try { hwservicens.Service1 service1 = new hwservicens.Service1(); service1.HelloWorld(); } catch(Exception e) { Console.WriteLine(e.ToString()); }在我的擷取塊中,我想做的是提取實際異常的消息以在我的程式碼中使用它。擷取的異常是 a
SoapException,這很好,但它的Message屬性是這樣的……System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Exception: HelloWorldException at WebService1.Service1.HelloWorld() in C:\svnroot\Vordur\WebService1\Service1.asmx.cs:line 27 --- End of inner exception stack trace ---…而且
InnerException是null。我想做的是提取(我的範例中的文本)的
Message屬性,有人可以幫忙嗎?如果可以避免,請不要建議解析.InnerException``HelloWorldException``Message``SoapException
不幸的是,我認為這是不可能的。
您在 Web 服務程式碼中引發的異常被編碼為 Soap Fault,然後將其作為字元串傳遞回您的客戶端程式碼。
您在 SoapException 消息中看到的只是來自 Soap 故障的文本,它沒有被轉換回異常,而只是儲存為文本。
如果您想在錯誤條件下返回有用的資訊,那麼我建議從您的 Web 服務返回一個自定義類,該類可以具有包含您的資訊的“錯誤”屬性。
[WebMethod] public ResponseClass HelloWorld() { ResponseClass c = new ResponseClass(); try { throw new Exception("Exception Text"); // The following would be returned on a success c.WasError = false; c.ReturnValue = "Hello World"; } catch(Exception e) { c.WasError = true; c.ErrorMessage = e.Message; return c; } }