Веб-служба, используемая из .dll, не работает с: Заголовок аутентификации, полученный от сервера, был «Согласовать, Kerberos» - PullRequest
0 голосов
/ 28 января 2019

Я вырывал свои волосы, пытаясь понять, что это за проблема.Я рыскал в Интернете в поисках ответов, но пока не получил разрешения.

Мы вызываем веб-службу через специально созданный .dll.Если мы вызываем службу из нашего клиента Visual Studio (тестирование выполняется по пользовательскому коду), это будет успешно выполнено.Если мы вызываем сервис из SoapUI, он завершается успешно, но как только мы вызываем его из приложения, использующего пользовательский код, происходит сбой со следующей ошибкой:

HTTP-запрос не авторизован с помощью схемы аутентификации клиента «Согласование».,Заголовок аутентификации, полученный от сервера, был 'Negotiate, Kerberos'.

Ниже используется наш код:

 Public Function Get_Company_Data(url As String, username As String, password As String, logFilePath As String) As Company_Service.Report_EntryType()

    LogToFile(logFilePath, "Start Get_Company_Data")
    LogToFile(logFilePath, String.Format("URL: {0} UN: {1} PWD: {2}", url, username, password))

    Dim client As New Company_Service.ReportPortClient(_customBinding, New ServiceModel.EndpointAddress(url))
    client.ClientCredentials.UserName.UserName = username
    client.ClientCredentials.UserName.Password = password

    Dim reportParams As New Company_Service.Execute_ReportType
    Dim returnValue As Company_Service.Report_EntryType()
    Try
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12 Or SecurityProtocolType.Ssl3
        returnValue = client.Execute_Report(reportParams)
        LogToFile(logFilePath, String.Format("Retured {0} records", returnValue.Count))
        Return returnValue
    Catch ex As Exception
        LogToFile(logFilePath, String.Format("Exception: {0}", ex))
        Return Nothing
    End Try


End Function      

Это наш код привязки:

 Private Function ConfigureCustomBinding() As ServiceModel.Channels.CustomBinding

    Dim sb As ServiceModel.Channels.TransportSecurityBindingElement = ServiceModel.Channels.SecurityBindingElement.CreateUserNameOverTransportBindingElement()
    sb.IncludeTimestamp = False
    Const lim As Integer = Int32.MaxValue
    Dim timeout = TimeSpan.FromMinutes(10)

    Dim eb As New ServiceModel.Channels.TextMessageEncodingBindingElement(ServiceModel.Channels.MessageVersion.Soap11, Text.Encoding.UTF8)

    Dim tb As New ServiceModel.Channels.HttpsTransportBindingElement()
    tb.MaxBufferPoolSize = lim
    tb.MaxBufferPoolSize = lim
    tb.MaxReceivedMessageSize = lim
    tb.MaxBufferSize = lim
    tb.Realm = String.Empty
    tb.AuthenticationScheme = AuthenticationSchemes.Negotiate

    Dim cb As New ServiceModel.Channels.CustomBinding(sb, eb, tb)
    cb.SendTimeout = timeout
    cb.ReceiveTimeout = timeout

    Return cb

End Function

Действительно надеюсь, что кто-то может помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...