Создание исключения веб-службы XML для неверного имени пользователя/пароля


person Alex    schedule 09.08.2009    source источник


Ответы (2)


Прежде всего, вам лучше добавить операцию Login, которая принимает заголовок вашего имени пользователя/пароля в качестве входных данных, аутентифицирует пользователя, а затем возвращает какой-либо токен авторизации в возвращаемом заголовке SOAP. Затем этот заголовок должен предоставляться как входной заголовок во всех последующих операциях.

Во-вторых, вы должны генерировать исключение SOAPException. Это приведет более или менее непосредственно к ошибке SOAP. Ошибка SOAP — это подходящий способ указать на ошибку в работе веб-службы по той же причине, что исключения лучше, чем состояние возврата в обычном методе — вам не нужно проверять состояние возврата в момент вызова.

Наконец, знали ли вы, что Microsoft объявила веб-службы ASMX «устаревшим» кодом и что они больше не исправляют в нем ошибки? Пора переходить на WCF.

person John Saunders    schedule 09.08.2009

я использовал исключения мыла для неудачного входа в систему:

[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);
        }
    }
person callisto    schedule 21.09.2009
comment
-1 за поимку Exception. Это слишком общее исключение, чтобы его перехватывать, вы понятия не имеете, что произошло, а затем разворачиваетесь и передаете неизвестное сообщение обратно клиенту! Вы бы точно так же сделали WriteException(ex); throw;, что по крайней мере сохранило бы трассировку стека! - person John Saunders; 29.09.2009