2017-03-22 35 views
2

我需要關於如何將在服務器上捕獲的錯誤消息返回給客戶端的建議。我正在創建WCF Restfull服務,並能夠在使用GET方法時返回錯誤消息。但幾乎找不到從POST方法返回錯誤消息的正確方法。WCF Restful POST返回從服務器到客戶端的錯誤消息

EDITED

對於@Abd:

我一直在使用拋WebFaultException嘗試,如下面的代碼:

try 
        { 
         newbudgetid = _service.Create(budgettrx); 
        } 
        catch (Exception ex) 
        { 
         error_message = ex.Message; 
         MyCustomErrorDetail customerror = new MyCustomErrorDetail(
"Error", error_message); 

         throw new WebFaultException<MyCustomErrorDetail>(customerror, HttpStatusCode.NotFound); 

        } 

這是類定義:

public class MyCustomErrorDetail 
    { 
    public MyCustomErrorDetail(string errorInfo, string errorDetails) 
     { 
      ErrorInfo = errorInfo; 
      ErrorDetails = errorDetails; 
     } 
     [DataMember] 
     public string ErrorInfo { get; private set; } 
     [DataMember] 
     public string ErrorDetails { get; private set; } 
    } 

在客戶端代碼上,應該如何我寫從服務器的錯誤輸出?

BudgetTransactionRequest bt = new BudgetTransactionRequest 
       { 
        transaction_code = "7PRM007690 ", 
        category = "Expenses", 
        claim_status = "Presales ID", 
        amount = "320000.00000", 
        application_type = "Payment Request", 
        opportunity = "BSMD000586", 
        project = null, 
        request_date = new DateTime(2013, 03, 09), 
        request_status = "Validated", 
        owner = "nurul.wiiyanti", 
       }; 




       WebClient proxy = new WebClient(); 
       proxy.Headers["Content-Type"] = "application/json"; 
       MemoryStream ms = new MemoryStream(); 
       DataContractJsonSerializer serialize = new DataContractJsonSerializer(typeof(BudgetTransactionRequest)); 
       serialize.WriteObject(ms, bt); 
       byte[] data = proxy.UploadData("http://10.10.64.19:8082/Service1.svc/CreateBudgetTransaction/", "POST", ms.ToArray()); 
       Stream stream = new MemoryStream(data); 
       DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(BudgetTransactionRequest)); 

回答

0

您可以創建ServiceResult類並將其用於所有Get和Post方法。在這個類,你可以使用屬性,如通用的結果,HasException,ExceptionMessage等

0

拋出WebFaultException(T errorDetail,HttpResponseCode代碼)

這裏您將響應類型設置爲另一個對象類型,這是有道理的,並且你還設置了你想要的ResponseCode。

的errorDetail必須是可序列化

link可能是有用的,或本link

+0

嗨@Abd:我編輯根據您的意見,我的問題。 – Icon

+0

在客戶端代碼上,只需讀取狀態碼的http狀態碼「response.StatusCode」和內容「response.Content.ReadAsString()」即可 – Abd

相關問題