我已创建了一个Web服务,并使用Soap标头进行身份验证,如下所述: http://aspalliance.com/805
我已经对它进行了调整,因此在每种方法中,它都会调用一个单独的“authenticate”方法,该方法在db中搜索用户名和密码,并返回true或false。 我的问题是,在这个方法中,如果它返回false(即,用户未被验证)我应该如何抛出异常,过滤回消费者应用程序?
答案 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);
}
}