[VB.NET] Webservice aanspreken (WSDL)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 01-09 17:46

Atmoz

Techno!!

Topicstarter
Beste mensen,

Ik ondervind problemen bij het uitlezen van een specifieke webservice. Deze probeer ik d.m.v. VB.NET 2010 aan te spreken. De bijbehorende certificaten heb ik (van het bedrijf wat de webservice host) ontvangen en op mijn computer geïnstalleerd.

Vervolgens heb ik in VB.NET 2010 een "Windows Form Application" gemaakt. Hierin heb ik een "ServiceReference" toegevoegd. (met de link naar de WSDL toe)

Dit heb ik als test code:
Dim b As New ServiceModel.BasicHttpBinding
b.Security.Mode = ServiceModel.SecurityMode.Transport
b.Security.Transport.ClientCredentialType = ServiceModel.TcpClientCredentialType.Certificate


' Create an EndPointAddress.
Dim ea As New ServiceModel.EndpointAddress("https://1.1.1.1/Webservice")

' Create the client.
Dim cc As New ServiceReference1.PortTypeClient(b, ea)

' Set the certificate for the client.
cc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.Root, X509FindType.FindBySubjectName, "2.2.2.2")


Try

cc.Open()

Dim test As ServiceReference1.ResponseEnvelope = cc.RequestEnvelope(Request)

cc.Close()
Catch adExc As AddressAccessDeniedException
MsgBox(adExc.Message)
Catch exc As System.Exception
MsgBox(exc.Message)
End Try
Bij het uitvoeren van bovenstaande code komt er deze foutmelding:
Could not establish trust relationship for the SSL/TLS secure channel with authority '1.1.1.1'
Hiervoor heb ik op internet een workaround gevonden. Als ik onderstaande code er nog bij zet, dan verschijnt bovenstaande foutmelding niet meer...
Private Function ValidateCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
' 'Return True to force the certificate to be accepted.
' Return True
'End Function

'Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateCertificate)
'End Sub
Er komt echter weer een andere foutmelding:
"Missing <wsse:Security> in SOAP Header"
Wat zou volgens jullie een oplossing kunnen zijn?
En moet ik het laatste stukje code erbij laten staan om die eerste fout niet te krijgen, of wat is wijsheid?
En hoe moet ik vervolgens verder om de 2e foutmelding niet meer te krijgen?

Hopelijk heeft er iemand een idee hierover :)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Heb je dat certificaat in de juiste store geinstalleerd?

In je code staat localmachine namelijk, standaard installeren die certificaten in je user store.

[ Voor 53% gewijzigd door Grijze Vos op 23-04-2012 13:32 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Wish
  • Registratie: Juni 2006
  • Laatst online: 17:27

Wish

ingwell

Eh - nou heb ik de ballen verstand van VB.Net - maar het lijkt mij dat de webservices blijkbaar een stukje informatie mist in de header. Wat heb je al gevonden in al deze posts en beschrijvingen ?
Is bijvoorbeeld het aanloggen met username/ww een onderdeel van de service?

Overigens lijkt het me logisch dat het certificaat geen trust kan opstellen met 1.1.1.1.... of heb je daar je certificaat geplaatst?

[ Voor 7% gewijzigd door Wish op 23-04-2012 13:35 ]

No drama


Acties:
  • 0 Henk 'm!

  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 01-09 17:46

Atmoz

Techno!!

Topicstarter
Grijze Vos schreef op maandag 23 april 2012 @ 13:31:
Heb je dat certificaat in de juiste store geinstalleerd?

In je code staat localmachine namelijk, standaard installeren die certificaten in je user store.
Jep, de certificaten staat goed geïnstalleerd. Want deze worden ook netjes door VB opgehaald en verbonden bij ClientCredentials.
Wish schreef op maandag 23 april 2012 @ 13:32:
Eh - nou heb ik de ballen verstand van VB.Net - maar het lijkt mij dat de webservices blijkbaar een stukje informatie mist in de header. Wat heb je al gevonden in al deze posts en beschrijvingen ?
Is bijvoorbeeld het aanloggen met username/ww een onderdeel van de service?
Nee, het aanloggen met user/ww is geen onderdeel. Daarvoor zijn die certificaten.
Overigens lijkt het me logisch dat het certificaat geen trust kan opstellen met 1.1.1.1.... of heb je daar je certificaat geplaatst?
1.1.1.1 is een verzonnen IP adres :)

Overigens ben ik er nog bij vergeten te vertellen dat ik het in SoapUI wel allemaal werkend heb. Dus de webservice werkt, de communicatie werkt, de certificaten zijn correct. Alles werkt. Behalve in VB.NET....

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Zoals hier wordt uitgelegd, wordt (de uitgever van) je certificaat niet vertrouwd, waarschijnlijk omdat het zelfgemaakt is. Geen probleem, je kunt het root-certificaat importeren, of inderdaad middels de door jou geposte code het certificaat in de code laten accepteren, ook al is het niet vertrouwd.

De tweede foutmelding zegt dat je client niet de juiste WS-Security-headers in het uitgaande bericht plaatst. Dit kun je laten doen door de juiste MessageSecurityVersion toe te passen. Hoe je dat in code doet zie je hier.

[ Voor 6% gewijzigd door CodeCaster op 23-04-2012 14:02 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 01-09 17:46

Atmoz

Techno!!

Topicstarter
CodeCaster schreef op maandag 23 april 2012 @ 14:01:
Zoals hier wordt uitgelegd, wordt (de uitgever van) je certificaat niet vertrouwd, waarschijnlijk omdat het zelfgemaakt is. Geen probleem, je kunt het root-certificaat importeren, of inderdaad middels de door jou geposte code het certificaat in de code laten accepteren, ook al is het niet vertrouwd.
Thanks duidelijk verhaal! Zoiets had ik eigenlijk al gehoopt :)
De tweede foutmelding zegt dat je client niet de juiste WS-Security-headers in het uitgaande bericht plaatst. Dit kun je laten doen door de juiste MessageSecurityVersion toe te passen. Hoe je dat in code doet zie je hier.
Interessant. We komen steeds een beetje verder...
Ik heb van de webservice-host een korte mail gekregen met daarin:

Key identifier type: Binary Security Token
Signature algorithm: http://www.w3.org/2000/09/xmldsig#rsa-sha1
Signature canonicalization: http://www.w3.org/2001/10/xml-exc-c14n#
Digest algorithm: http://www.w3.org/2000/09/xmldsig#sha1

Dus ik neem aan dat ik deze "instellingen" ook ergens moet toepassen in mijn code.

Ik ben nu zover (dankzij dat stukje voorbeeld code in jou link) dat ik een "SecurityBindingElement" moet uitkiezen. Welke moet ik daar nemen? (ik heb GEEN username/password gekregen)

Acties:
  • 0 Henk 'm!

  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 01-09 17:46

Atmoz

Techno!!

Topicstarter
VB geeft nu volgende foutmelding terug:
An unsecured or incorrectly secured fault was received from the other party. See the inner FaultException for the fault code and detail.
En in de "InnerException" staat dan:
De eerste foutmelding geeft volgens mij aan dat er wel al communicatie met de andere kant is :)
De tweede dat er iets gesigned moet worden, maar wat, en vooral hoe?
Ik heb het certificaat namelijk al netjes meegegeven met:
' Create the client.
Dim cc As New ServiceReference1.PortTypeClient(binding, ea)

' Set the certificate for the client.
cc.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.Root, X509FindType.FindBySubjectName, "testing123")

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

[google=wcf sign body]

Eerste hit:
I had to set protection level for the service contract (Reference.cs):

C#:
1
2
[System.ServiceModel.ServiceContractAttribute(Namespace="http://bxd.fi/Service", ConfigurationName="ServicePortType", ProtectionLevel=ProtectionLevel.Sign)]
    public interface ServicePortType {...
Wellicht werkt dat? :)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 01-09 17:46

Atmoz

Techno!!

Topicstarter
Werkt helaas ook niet.
Ik het erbij gezet (even iets aangepast omdat het in VB.NET iets anders staat:
ProtectionLevel:=ProtectionLevel.Sign
Maar dan nog altijd diezelfde foutmelding:
{"Element http://schemas.xmlsoap.org/soap/envelope/Body must be signed"}


[edit]

We hebben Visual Studio 2005 eens geprobeerd omdat men zegt dat WSE niet meer met VB 2010 werkt.
Nu komt er deze error:

Afbeeldingslocatie: http://www.lumatronix.nl/error.jpg

Iemand nog ideeën? :)

[ Voor 28% gewijzigd door Atmoz op 25-04-2012 17:06 ]

Pagina: 1