Веб-служба ASMX: как создать исключение мыла из службы asmx, которое мне нравится перехватывать со стороны клиента

Я хочу, если клиент отправляет неправильные учетные данные, то служба выдает исключение мыла, но я пытался, но все равно не повезло

посмотрите мой обновленный код здесь https://github.com/karlosRivera/EncryptDecryptASMX

Любой желающий может загрузить мой код и запустить на своем ПК, чтобы выявить проблему.

увидеть эту область

[AuthExtension]
[SoapHeader("CredentialsAuth", Required = true)]
[WebMethod]
public string Add(int x, int y)
{
    string strValue = "";
    if (CredentialsAuth.UserName == "Test" && CredentialsAuth.Password == "Test")
    {
        strValue = (x + y).ToString();
    }
    else
    {
        throw new SoapException("Unauthorized", SoapException.ClientFaultCode);

    }
    return strValue;
}

Для этой линии throw new SoapException("Unauthorized", SoapException.ClientFaultCode);

Тело XML ответа не получает изменений, которые я видел из своей функции сообщения процесса soapextension.

Итак, у меня есть два вопроса сейчас

1) хочу throw SoapException от службы, для которой мыльная реакция должна быть изменена.

2) Со стороны клиента мне нужно поймать SoapException

Пожалуйста, просмотрите мой последний код по ссылке и скажите, что изменить. Спасибо

2 ответа

Решение

Другой вариант - избежать отправки SoapExceptions, но более сложные объекты, которые встраивают семантику ошибок. Например

[Serializable]
class Result<T>
{
    public bool IsError { get; set; }
    public string ErrorMessage { get; set; }

    public T Value { get; set; }
}

В этом случае ваш метод может выглядеть так:

[AuthExtension]
[SoapHeader("CredentialsAuth", Required = true)]
[WebMethod]
public Result<string> Add(int x, int y)
{
    string strValue = "";
    if (CredentialsAuth.UserName == "Test" && CredentialsAuth.Password == "Test")
    {
        return new Result<string> { Value = (x + y).ToString() };
    }
    else
    {
        return new Result<string> { IsError = true, ErrorMessage = $"Unauthorized -  {SoapException.ClientFaultCode}" };
    }
}

Result может быть разработан для включения массива ошибок ввода / вывода для возврата более точных сообщений об ошибках, связанных с неправильными значениями входных параметров.

Рассмотрим миграцию и использование WCF. Это были ошибки WCF.

Вы можете заменить сообщения об ошибках или обработать ошибки, используя SoapExtensions.AfterSerialize или же BeforeSerialze методы.

Источник

Другие вопросы по тегам