为无效的用户名/密码抛出XML Web服务异常

时间:2009-08-09 15:27:51

标签: c# web-services exception-handling asmx

我已创建了一个Web服务,并使用Soap标头进行身份验证,如下所述: http://aspalliance.com/805

我已经对它进行了调整,因此在每种方法中,它都会调用一个单独的“authenticate”方法,该方法在db中搜索用户名和密码,并返回true或false。 我的问题是,在这个方法中,如果它返回false(即,用户未被验证)我应该如何抛出异常,过滤回消费者应用程序?

2 个答案:

答案 0 :(得分:1)

首先,您最好添加一个Login操作,该操作将您的用户名/密码头作为输入,对用户进行身份验证,然后在返回的SOAP Header中返回某种授权令牌。然后,应在所有后续操作中将此标头作为输入标头提供。

其次,你应该抛出一个SOAPException。这或多或少会直接转换为SOAP Fault。 SOAP错误是指示Web服务操作错误的适当方式,原因与异常优于普通方法中的返回状态相同 - 您不必在调用时检查返回状态。 / p>

最后,您是否知道Microsoft已将ASMX Web服务声明为“遗留”代码,并且他们不再修复其中的错误?是时候搬到WCF了。

答案 1 :(得分:0)

我使用soap异常登录失败:

[WebMethod]
    [SoapHeader("authentication")]
    public User Authenticate()
    {
        try
        {
            authentication.Roles = new string[] { UserRoles.Users };
            ConfigureAuthentication();
            Service<ISecurity>.Interface.Authenticate();
            Guid userId = Service<ISecurity>.Interface.GetUserId(authentication.UserName);
            return Service<IObjectRetriever>.Interface.Retrieve<User>(userId);
        }
        catch (Exception ex)
        {
            WriteException(ex);
            throw new SoapException(ex.Message, new XmlQualifiedName(SoapException.ServerFaultCode.Name), ex);
        }
    }