2012-12-10 154 views
0

我正在使用幾天的WCF服務。我有一個書面服務因出現異常而作爲FaultException和詳細信息

public String Login(string Vendorname, string VendorAccessCode) 
    {   
     try 
     { 
     if() 
     { 
     } 
     else 
     { 
      UserIdentityToken = string.Empty; 
      this.ErrorMessage = "Authentication failed. Please contact administrator"; 
      throw new FaultException(this.ErrorMessage); 
     } 

     } 
     catch (FaultException ex) 
     { 
      logger.Error(ex.Message); 
     } 
     catch (Exception ex) 
     { 
      logger.Error(ex.Message); 
     } 

     return UserIdentityToken; 
    } 

我正在處理的Messgae督察在客戶端上的例外在此之後的

 public class MessageInspector : IClientMessageInspector 
    { 


    public void AfterReceiveReply(ref Message reply, object correlationState) 
    { 
     if (reply.IsFault) 
     { 

      MessageFault fault = MessageFault.CreateFault(new FaultCode("Receiver"), new FaultReason(reply.ToString())); 
      throw new FaultException(fault); 
     } 
    } 
    } 

我處理我的客戶端代碼爲

  try 
      {        objVendorServiceClient.Login(txtuserName.Text.Trim(), 
txtAccessCode.Text.Trim());    
      } 
      catch (FaultException ex) 
      {     
       lblAuthenticationMessage.Text = ex.Message;     
       throw ex; 
      } 

但是,如果在服務中驗證失敗,則Reply.IsFault僅返回false。任何人都可以解釋我的答案是什麼。是錯誤的,它對我有什麼用處?

回答

0

Message.IsFault Property

獲取一個值,用於指示該消息是否產生任何SOAP故障。

你說:

當過身份驗證的服務發生故障,Reply.IsFault是返回false

那是因爲你自己趕上了故障,記錄它,然後返回一個空字符串。您必須拋出FaultException才能使WCF捕獲它並從中創建SOAP錯誤。

+0

嗨,感謝您的建議。但是當我試圖在Message Inspector中檢索異常時,我正在檢索MessageInspector中的MessageFault,正如我的問題中所述。這給了我原始的肥皂格式。我可以在這裏得到確切的錯誤信息嗎? – Bhuvan

+0

@Bhuvan我希望看到Message Inspector的更多代碼,並且還可以顯示您收到的SOAP消息,例如使用[Fiddler](http://www.fiddler2.com/fiddler2/)? – CodeCaster

+0

嗨,我編輯了我的問題,我附加了消息檢查器和我在異常中收到的SOAP值。 – Bhuvan