Как SOAP-заголовки работают в веб-сервисах ASMX? - PullRequest
0 голосов
/ 04 мая 2011

У меня есть проект, который использует файл asmx с [WebMethods] и [SoapHeader ("Auth")].У меня нет опыта использования SOAP, и я пока не понимаю, как он работает.

Просматривая код, я заметил, что вы можете использовать переменную с тем же именем, что и в заголовке, и она содержит данные.Как данные отправляются в шапку?Откуда это?

Ответы [ 3 ]

2 голосов
/ 04 мая 2011

Данные отправляются в заголовке с использованием класса, производного от SoapHeader. Этот класс будет объявлен как свойство в вашем классе веб-сервиса. Затем в своем веб-методе вы проверите информацию об аутентификации в этом свойстве перед обработкой фактического метода.

Простую реализацию можно найти здесь http://www.codeproject.com/KB/cpp/authforwebservices.aspx

Следующая ссылка msdn рассказывает о другом подобном методе, который был бы более изощренным http://msdn.microsoft.com/en-us/library/9z52by6a.aspx.

Основная идея передачи данных в заголовке остается прежней.

1 голос
/ 04 мая 2011

Данные поступают из XML в разделе <soap:Header> конверта SOAP.

0 голосов
/ 26 декабря 2018

Создайте класс для вашего мыльного заголовка, как обычно.

public class AuthHeader : SoapHeader
{
    public string CompanyID;
    public string Username;
    public string Password;
}

Тогда в вашем обычном классе была ссылка.

public class MyClass : WebService
{
    public readonly AuthHeader authHeader;

    [SoapHeader("authHeader", Direction = SoapHeaderDirection.In)]
    [WebMethod(CacheDuration = 20
        , EnableSession = true
        , Description = "Find stuff now."
        , MessageName = "FindStuff")]
    [ScriptMethod(UseHttpGet = false
        , ResponseFormat = ResponseFormat.Xml
        , XmlSerializeString = true)]

    public MyResponseClass FindStuff(string searchString)
    {
        MyResponseClass myResponseClass = new MyResponseClass();
        if (authHeader.Username == "myUser" &&
            authHeader.Password == "myPass" &&
            authHeader.CompanyID == "BobsTire")
        {
            ....
            myResponseClass = ....
        }
        return myResponseClass;
    }
}
...