2015-04-21 64 views
1

我正在實現.Net Webservice(不是WCF),並且需要在某些情況下拋出SoapFault,根據協議,我應該發送一個包含InternalFaultCode元素的自定義錯誤。如何在.net WebService中拋出SoapFault?

我試過用我自己的FaultObject拋出一個SoapFaultException作爲細節,但客戶端在faultstring元素下獲得該異常的.ToString()。

// This is the method I call every time I want to throw a FaultException 
private void ThrowFault(string internalCode, string errorMsg) 
{ 
    throw new SoapException(errorMsg, SoapException.ServerFaultCode, new FaultException<InternalFaultDataType>(new InternalFaultDataType("Server", errorMsg, internalCode))); 
} 

// This is just an example 
[System.Web.Services.WebMethod()] 
[return: System.Xml.Serialization.XmlElement("authenticateUserResponse")] 
public AuthenticateUserResponse AuthenticateUser(AuthenticateUserRequest data) 
{ 
    var x = User.GetByUserName(data.username); 
    if(null != x) { 
     // Check auth 
     return AuthenticateUserResponse.fromUser(x); 
    } else { 
     this.ThrowFault("INVALID_CREDENTIALS", "Invalid username or password"); 
    } 
} 
+0

添加一些示例代碼可以幫助我們 –

+0

我不知道該怎麼告訴你,因爲我不知道如何從Web服務把我自己的SoapFaultException。現在我扔了其中的一個,但顯然它被抓到並重新拋出,我不知道如何。 –

+0

所以你可以把這個代碼..所以,我們也可以anlayse –

回答

-1

我終於找到了我正在尋找的東西,有幾條鏈接讓我通過正確的方式完成這個過程。

基本上其過程是:

  • 擴展的SoapExtension類和重寫ProcessMessage的()方法。

  • 在ProcessMessage()中,爲SoapMessageStage.AfterSerialize的消息階段添加特殊處理程序代碼。

  • 修改Web服務的web.config文件並將節點添加到節中。

User Friendly ASP.NET Exception Handling

Throwing Better .NET Exceptions with SOAP and HTTP

相關問題