Ik ben bezig een client te schrijven voor een SOAPwebservice, die gebruikmaakt van HTTPS en daarvoor de benodigde X509 certificaten heeft uitgegeven.
Met de WSDL tool van de .NET SDK heb ik vanuit de wsdl file een proxy kunnen bouwen.
Omdat voor het gebruik een certificaat is vereist, vraag ik deze op uit My Certificate Store, en voeg bijbehorend token toe aan de Tokens colllection van de RequestSOAPcontext.
Vervolgens nog het bericht signen voordat ik het request uitvoer.
Ik krijg nu een SOAPException terug:
Om te achterhalen wat er fout gaat heb ik even een WebBrowser Control op een Form gegooid.
Als ik nu mijn letterlijke Soaprequest in een string donder, en deze aanbied via de
Navigate method van deze browser control:
Dan komt er een popup-box tevoorschijn die vraagt welk certificaat ik wil gebruiken. Als ik hier op ok klik, dan komt het soap-request blijkbaar wel aan en krijg ik ook netjes een soap-response terug, welke dan in het venster van die browsercontrol staat.
maar dit is natuurlijk niet werkbaar, dan kan ik net zo goed Internet explorer gebruiken.
Ik weet 100% zeker dat ik het juiste certificaat heb (er is er maar 1tje!).
Wat kan dit zijn?! Ik doe duidelijk iets fout bij dat hele WSE verhaal, want als ik bewust bij de WebBrowser-methode geen certificaat kies, krijg ik dezelfde soap-exception terug.
Kortom, mijn vraag is dus: Wie heeft ervaring met het succesvol bouwen van een SOAPclient die WSE gebruikt voor een SOAPwebservice over HTTPS en kan mij helpen?
Met de WSDL tool van de .NET SDK heb ik vanuit de wsdl file een proxy kunnen bouwen.
code:
1
2
3
| Public Class vz3738
Inherits Microsoft.Web.Services3.WebServicesClientProtocol
... |
Omdat voor het gebruik een certificaat is vereist, vraag ik deze op uit My Certificate Store, en voeg bijbehorend token toe aan de Tokens colllection van de RequestSOAPcontext.
Vervolgens nog het bericht signen voordat ik het request uitvoer.
code:
1
2
3
4
| ... requestContext.Security.Tokens.Add(token) requestContext.Security.Elements.Add(New MessageSignature(token)) ... |
Ik krijg nu een SOAPException terug:
code:
1
2
3
4
5
| <soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Server was unable to process request. --> Geen toegang.</faultstring>
<detail />
</soap:Fault> |
Om te achterhalen wat er fout gaat heb ik even een WebBrowser Control op een Form gegooid.
Als ik nu mijn letterlijke Soaprequest in een string donder, en deze aanbied via de
Navigate method van deze browser control:
code:
1
2
3
| Dim postbytes() As Byte
postbytes = System.Text.ASCIIEncoding.ASCII.GetBytes("<S:Envelope xmlns: (hele soaprequest dus) ...</S:Body></S:Envelope>")
WebBrowser1.Navigate("https://.. (url van webservice)...asmx", "", postbytes, "") |
Dan komt er een popup-box tevoorschijn die vraagt welk certificaat ik wil gebruiken. Als ik hier op ok klik, dan komt het soap-request blijkbaar wel aan en krijg ik ook netjes een soap-response terug, welke dan in het venster van die browsercontrol staat.
maar dit is natuurlijk niet werkbaar, dan kan ik net zo goed Internet explorer gebruiken.
Ik weet 100% zeker dat ik het juiste certificaat heb (er is er maar 1tje!).
Wat kan dit zijn?! Ik doe duidelijk iets fout bij dat hele WSE verhaal, want als ik bewust bij de WebBrowser-methode geen certificaat kies, krijg ik dezelfde soap-exception terug.
Kortom, mijn vraag is dus: Wie heeft ervaring met het succesvol bouwen van een SOAPclient die WSE gebruikt voor een SOAPwebservice over HTTPS en kan mij helpen?