Я вырывал свои волосы, пытаясь понять, что это за проблема.Я рыскал в Интернете в поисках ответов, но пока не получил разрешения.
Мы вызываем веб-службу через специально созданный .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
Действительно надеюсь, что кто-то может помочь?