Я пытаюсь вызвать веб-службу SOAP с использованием сертификата клиента и получаю следующее сообщение об ошибке.
HTTP-запрос не авторизован с помощью схемы аутентификации клиента «Аноним».Заголовок аутентификации, полученный от сервера, был ''.
До того, как потребовалась защита веб-службы, я смог получить данные с помощью приведенного ниже кода минус код сертификата.Я подтвердил, что код сертификата правильно извлекает информацию о сертификате клиента из моего хранилища сертификатов.Ниже кода я также добавил информацию о конфигурации своего приложения
Может ли кто-нибудь объяснить, почему я получаю сообщение об ошибке выше?Заранее спасибо всем, кто может предоставить любую информацию.
Friend Function GetWorkByBAWTS(ByVal sBAWTSLookupName As String, ByVal sUnit As String, ByVal sWorkType As String, ByVal sStatus As String) As ArrayList
System.Net.ServicePointManager.Expect100Continue = False
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls Or SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
Dim sSearchType As X509FindType = DirectCast([Enum].Parse(GetType(X509FindType), ConfigurationManager.AppSettings("searchtype")), X509FindType)
Dim sSubjectValue As String = ConfigurationManager.AppSettings("searchvalue")
Dim sDelimiter As String = ConfigurationManager.AppSettings("delimiter")
Dim sStoreName As StoreName = DirectCast([Enum].Parse(GetType(StoreName), ConfigurationManager.AppSettings("storename")), StoreName)
Dim sStoreLocation As StoreLocation = DirectCast([Enum].Parse(GetType(StoreLocation), ConfigurationManager.AppSettings("storelocation")), StoreLocation)
Dim cert As X509Certificate2 = Nothing
Dim store As X509Store = New X509Store(StoreName.My, StoreLocation.CurrentUser)
store.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)
Dim certcollection As X509Certificate2Collection = store.Certificates.Find(sSearchType, sSubjectValue, False)
Dim activecollection As X509Certificate2Collection = certcollection.Find(X509FindType.FindByTimeValid, DateTime.Now, False)
cert = certcollection(0)
store.Close()
Dim iRetry As Integer = 0
Dim alWorkItems As New ArrayList
Dim oResponse As lookupObjectsResponse = Nothing
Dim oClient As ProcessingServiceClient = New ProcessingServiceClient("ProcessingServicePort")
oClient.ClientCredentials.ClientCertificate.Certificate = cert
oClient.Endpoint.Address = New ServiceModel.EndpointAddress("https://mywebservice:8443/prodapp/ProcessingService?wsdl")
Dim oRequest As lookupObjects = New lookupObjects()
oRequest.lookupObjectsRequest = New lookupObjectsRequest()
oRequest.lookupObjectsRequest.lookupName = "LKWTSTAT"
oRequest.lookupObjectsRequest.lookupParameters = New lookupObjectsRequestLookupParameters()
m_oAuthInfo = New authorizationInfo()
m_oAuthInfo.userId = "user1"
oClient.ClientCredentials.UserName.UserName = "user1"
oClient.ClientCredentials.UserName.Password = "password"
Dim oItems As lookupParameter()
ReDim oItems(2)
oRequest.lookupObjectsRequest.lookupParameters.Items = oItems
oRequest.lookupObjectsRequest.lookupParameters.Items(0) = New lookupParameter()
oRequest.lookupObjectsRequest.lookupParameters.Items(0).name = "businessArea"
oRequest.lookupObjectsRequest.lookupParameters.Items(0).Value = sUnit
oRequest.lookupObjectsRequest.lookupParameters.Items(1) = New lookupParameter()
oRequest.lookupObjectsRequest.lookupParameters.Items(1).name = "type"
oRequest.lookupObjectsRequest.lookupParameters.Items(1).Value = sWorkType
oRequest.lookupObjectsRequest.lookupParameters.Items(2) = New lookupParameter()
oRequest.lookupObjectsRequest.lookupParameters.Items(2).name = "status"
oRequest.lookupObjectsRequest.lookupParameters.Items(2).Value = sStatus
oResponse = oClient.lookupObjects(m_oAuthInfo, oRequest)
If Not oResponse.lookupObjectsResponse1.Items Is Nothing Then
For Each oWorkItem As workInstance In oResponse.lookupObjectsResponse1.Items
alWorkItems.Add(oWorkItem)
Next
End If
Return alWorkItems
End Function
app.config
<configuration>
<configSections>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="AWDProcessingServiceBinding" closeTimeout="00:01:00"
openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="655360" maxBufferPoolSize="524288" maxReceivedMessageSize="655360"
messageEncoding="Mtom" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<!-- <security mode="Transport">
<transport clientCredentialType="Certificate" proxyCredentialType="Basic" realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security> -->
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://mywebservice:8443/betaapp/ProcessingService?wsdl"
binding="basicHttpBinding" bindingConfiguration="ProcessingServiceBinding"
contract="PS.ProcessingService" name="AWDProcessingServicePort" />
</client>
</system.serviceModel>
<appSettings>
*** removed cert info ***
</appSettings>