[VB.NET 2005] Soap header namespace wijzigen

Pagina: 1
Acties:
  • 427 views sinds 30-01-2008
  • Reageer

  • mrfatmen
  • Registratie: Februari 2001
  • Laatst online: 19:24
Ik ben bezig een client applicatie te maken welke via soap (webservice) infomatie registreerd.
De opdracht geeft het volgende soap bericht:
XML:
1
2
3
4
5
6
7
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
< knip..... >

Nu stelt de webservice verplicht dat ik een oudere versie gebruik van de namespace wsse en wsu. Namelijk de 2003/06 variant.

Maar ik krijg het voor geen mogelijkheid voor elkaar.
Er is heel veel info hierover te vinden hoe je het in ASP aan de server kant regel.
Maar ik moet het vanuit de client doen, iemand een idee hoe dit te doen en of mij in de goede richting kan duwen?

Het gaat hier dus om een client in win32 vb 2005 formaat niet in vb/asp

Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein


Verwijderd

Er is heel veel info hierover te vinden hoe je het in ASP aan de server kant regel.
Zelf een klein webservice'je schrijven gebaseerd op de WSDL die je moet gebruiken (je zou 'm zelfs puur naar je oude WebReference kunnen laten proxyen), daar de nodige aanpassingen maken en dan die webservice als WebReference voor je client gebruiken?

Disclaimer: nooit geprobeerd, dus geen idee of 't werkt... ;)

  • mrfatmen
  • Registratie: Februari 2001
  • Laatst online: 19:24
Dit lijkt met niet het handigste, Ik denk uit mijn ervaring met dotnet dat je een functie moet override en dan de soap envelope moet aanpassen.
Alleen weet ik niet welke functie ik dan moet overriden.

Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein


  • mrfatmen
  • Registratie: Februari 2001
  • Laatst online: 19:24
Ik heb het nu bijna werkend.
Ik heb de volgende functie overriden vanuit uit een class welke ik gebruik als policy
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
    Public Overrides Function ProcessMessage(ByVal envelope As SoapEnvelope) As SoapFilterResult
                '               envelope.Envelope.SetAttribute("xmlns:wsse", "http://schemas.xmlsoap.org/ws/2003/06/secext")

                'If envelope.Header.HasChildNodes  Then
                '   For tt As Integer = envelope.Header.ChildNodes.Count - 1 To 0
                '       Dim Tnode As XmlNode = envelope.Header.ChildNodes(tt)
                '       If Not (IsNothing(Tnode)) Then Console.WriteLine(Tnode.OuterXml) : envelope.Header.RemoveChild(Tnode)
                '   Next
                'End If

                Dim xmld As XmlDocument = envelope

                Dim Elem_Security As XmlElement = xmld.CreateElement("wsse", "Security", "http://schemas.xmlsoap.org/ws/2003/06/secext")

                Dim Elem_UsernameToken As XmlElement = xmld.CreateElement("wsse", "UsernameToken", "http://schemas.xmlsoap.org/ws/2003/06/secext")
                Elem_UsernameToken.SetAttribute("xmlns:wsse", "http://schemas.xmlsoap.org/ws/2003/06/secext")
                Elem_UsernameToken.SetAttribute("xmlns:wsu", "http://schemas.xmlsoap.org/ws/2003/06/utility")
                Elem_UsernameToken.SetAttributeNode("Id", "http://schemas.xmlsoap.org/ws/2003/06/utility").InnerText = "user"

                Dim Elem_Username As XmlElement = xmld.CreateElement("wsse", "Username", "http://schemas.xmlsoap.org/ws/2003/06/secext")
                Username.InnerText = "Gebruikersnaamhier"

                Dim Elem_Password As XmlElement = xmld.CreateElement("wsse", "Password", "http://schemas.xmlsoap.org/ws/2003/06/secext")
                Elem_Password.SetAttribute("Type", "wsse:PasswordText")
                Elem_Password.InnerText = "Wachtwoordhier"

                Dim Elem_Created As XmlElement = xmld.CreateElement("wsu", "Created", "http://schemas.xmlsoap.org/ws/2003/06/utility")
                Elem_Created.InnerText = "2006-08-20T17:40:50Z"

                Elem_UsernameToken.AppendChild(Elem_Username)
                Elem_UsernameToken.AppendChild(Elem_Password)
                Elem_UsernameToken.AppendChild(Elem_Created)

                Elem_Security.AppendChild(Elem_UsernameToken)

                envelope.Header.AppendChild(Elem_Security)


                Dim dom As XmlDocument = Nothing

                Dim timeStamp As DateTime = DateTime.Now
                Dim rootNode As XmlNode = Nothing

                dom = New XmlDocument()

                'If Not File.Exists(filename) Then
                Dim xmlDecl As XmlDeclaration = dom.CreateXmlDeclaration("1.0", "utf-8", Nothing)

                dom.InsertBefore(xmlDecl, dom.DocumentElement)

                rootNode = dom.CreateNode(XmlNodeType.Element, "log", String.Empty)
                dom.AppendChild(rootNode)
                dom.Save(filename)
                'Else
                '   dom.Load(filename)
                '   rootNode = dom.DocumentElement
                'End If

                Dim newNode As XmlNode = dom.ImportNode(envelope.DocumentElement, True)
                rootNode.AppendChild(newNode)

                dom.Save(filename)

                Return SoapFilterResult.Continue
            End Function    'ProcessMessage
Deze code maakt ook gelijk een file aan van de soap evelope

De server geeft nu nog wel een fout:
WSEC5078E: Login failed: com.ibm.websphere.security.auth.WSLoginFailedException:
[LDAP: error code 49 - Invalid Credentials]
Maar weet nog niet of dit door dit stuk komt of door iets anders, ben nog aan het zoeken.
Maar is dit een goede manier om dit te doen? (uiteraard komt username / password straks niet hardcoded in de class)

Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein