Базовая аутентификация с веб-сервисом asmx - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь реализовать базовую авторизацию для службы ASMXweb. Я создал клиента в качестве справочной службы в VS2015. В качестве примера я использую код в базовой аутентификации веб-службы Asmx .

Я ввожу данные для входа в ClientCredentials, как показано ниже

   Dim svc As New WebServiceSoapClient()
   svc.ClientCredentials.UserName.UserName = "userId"
   svc.ClientCredentials.UserName.Password = "i2awTieS0mdO"

Моя проблема заключается в том, что в HttpModule для авторизации в веб-сервисе эти учетные данные не передаются в модуль. Есть ли альтернативный способ сделать это?

1 Ответ

0 голосов
/ 03 мая 2018

Я нашел ответ по частям на Как добавить HTTP-заголовок в SOAP-клиент . Мне пришлось объединить пару ответов на этой странице, чтобы заставить его работать.

    Dim svc As New WebServiceSoapClient()
    Dim responseService As SoapResponseObject
    Using (new OperationContextScope(svc.InnerChannel))

        Dim auth = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("userId:i2awTieS0mdO"))

        Dim requestMessage = New HttpRequestMessageProperty()
        requestMessage.Headers("Authorization") = auth
        OperationContext.Current.OutgoingMessageProperties(HttpRequestMessageProperty.Name) = requestMessage

        dim aMessageHeader = MessageHeader.CreateHeader("Authorization", "http://tempuri.org", auth)
        OperationContext.Current.OutgoingMessageHeaders.Add(aMessageHeader)

        responseService = svc.ListDistricts(requestService)

    End Using

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

...