Dot-Net

從 WCF REST 獲取錯誤詳細資訊

  • January 7, 2014

我有一個 .Net WCF 客戶端使用的 REST 服務。

當遇到錯誤時,REST 服務會返回一個 HTTP 400 錯誤請求,其響應正文包含 JSON 序列化詳細資訊。

如果我使用 Fiddler、Javascript 或直接從 C# 執行請求,我可以在發生錯誤時輕鬆訪問響應正文。

但是,我正在使用ChannelFactory具有 6 個非常複雜的介面的 WCF。這個代理拋出的異常總是 a ProtocolException,沒有有用的細節。

當我收到此錯誤時,有什麼方法可以獲取響應正文?


更新

我意識到使用 .Net 有很多不同的方法可以做到這一點,並且還有其他方法可以獲得錯誤響應。他們很有用,但不回答這個問題。

我們正在使用的 REST 服務會發生變化,並且當它們發生變化時,複雜的介面會得到更新。與新介面一起使用ChannelFactory意味著我們將獲得編譯時(而不是執行時)異常,並使這些更容易維護和更新程式碼。

使用 WCF 通道時,有什麼方法可以獲取錯誤 HTTP 狀態的響應正文?

您可以檢索異常詳細資訊,如下所示:

               Exception innerException = exception.InnerException;
               WebException webException = innerException as WebException;
               HttpWebResponse response = webException.Response as HttpWebResponse;
               string statusDescription = response.StatusDescription;
               HttpStatusCode statusCode = response.StatusCode;

InnerExceptionProtocolException是一個WebException. 您可以從中獲取HttpWebResponse並呼叫GetResponseStream以讀取實際的響應正文。(記得在閱讀之前尋找到流的開頭)。

var webException = (WebException) protocolException.InnerException;
var response = (HttpWebResponse) webException.Response;
var responseStream = response.GetResponseStream()
responseStream.Seek(0, SeekOrigin.Begin);
var reader = new StreamReader(responseStream);
var responseContent = reader.ReadToEnd();

引用自:https://stackoverflow.com/questions/2516914