如何在.net WebService中抛出SoapFault?

时间:2015-04-21 14:31:37

标签: c# .net web-services soap

我实现.Net Webservice(不是WCF)并且需要在某些情况下抛出SoapFault,根据协议我应该发送一个包含InternalFaultCode元素的自定义错误。

我尝试使用自己的FaultObject作为详细信息抛出SoapFaultException,但客户端在faultstring元素下获取该Exception的.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");
    }
}

1 个答案:

答案 0 :(得分:-1)

我终于找到了我想要的东西,很少有链接让我顺利地完成了这个过程。

基本上这个过程是:

  • 扩展SoapExtension类并覆盖ProcessMessage()方法。

  • 在ProcessMessage()中,为SoapMessageStage.AfterSerialize的消息阶段添加特殊处理程序代码。

  • 修改Web服务的web.config文件并在节中添加节点。

User Friendly ASP.NET Exception Handling

Throwing Better .NET Exceptions with SOAP and HTTP