2014-11-25 57 views
0

我是WCF的新手,嘗試使用WebHttpBinding綁定來構建演示WCF項目。在客戶端獲取Fault異常

項目工作正常,但我堅持故障例外的概念。下面是我用來生成錯誤異常的代碼,但在客戶端,我得到的是(400)錯誤請求錯誤,並且InnerException爲空。我哪裏錯了?

public DataTable GetCreativesData(string id,string type) 
    { 
     try { 
     DataAccess da = new DataAccess(); 
     string qryStr = @"select * from dbo.tbMyTable"; 
     if (type != null && type != "") 
      qryStr += " WHERE1 type='"+type+"'"; 
     DataTable dt = da.GetDataTable(qryStr); 
     return dt; 
     } 

     catch (FaultException ex) { 
      throw new FaultException("Improper Query"); 
     } 
    } 
+0

你是從你的WCF服務拋出'FaultException'嗎? – 2014-11-25 05:33:22

+0

是的..我從WCF服務 – Tweety01 2014-11-25 05:42:13

回答

0

對於故障異常,400錯誤是正確的,因爲您向用戶指示他們提供的內容可能有問題。

沒有內部異常,當你提高FaultException,因爲FaultException一個核心概念是,它可以跨越技術(互操作性)&內部異常的概念是非常具體的.NET。

如果您確實想要通過Exception,您可以使用FaultException,它允許您指定一個通用參數,然後將其設置爲Exception。然後你會創建並提出。

要記住的另一個方面是你如何處理你的錯誤,在你的代碼中拋出一個全新的異常。這意味着變量ex中的所有信息都會丟失。除非你打算隱瞞的東西,你可以試試這個

catch (FaultException ex) 
{ 
    throw; 
} 

此選項將原始FaultException,並再次引發它,從而保持在它的所有信息。

最後,在你的問題之外,這個SQL讓我害怕 - 看起來它可能容易受到SQL injection attack的影響 - 只是你可能想要檢查的東西。

+0

提高它感謝您的解釋羅伯特..但是如果我必須顯示實際的錯誤給用戶....如假設我們已經在服務中劃分操作,如果用戶傳遞數字0 .. ..然後我想向用戶顯示自定義消息...並且SQL僅用於本地測試目的。 – Tweety01 2014-11-25 05:44:50

+0

添加了有關FaultException 的信息,這可能是您想要的 – 2014-11-25 05:53:20