Веб-служба 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 ответа
Другой вариант - избежать отправки SoapException
s, но более сложные объекты, которые встраивают семантику ошибок. Например
[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
методы.