Hinzufügen von SOAP: HEADER Benutzername und Passwort mit WSE 3.0

7

Ich habe erfolgreich einen WS-Client erstellt, der korrekt funktioniert, wenn Sie KEINE Authentifizierung verwenden.

Allerdings muss der Server (WebSphere) jetzt einen WS-Sicherheits-Benutzernamen-Token hinzufügen, und es fällt mir schwer, dies zu tun. Die resultierende SOAP-Nachricht sollte in etwa so aussehen:

%Vor%

Ich habe Microsoft WSE 3.0 SDK heruntergeladen und installiert und einen Verweis auf die DLL in meinem Visual Studio 2005-Projekt hinzugefügt.

Ich habe jetzt Zugriff auf die Namespaces von Microsoft.Web.Services3. *, aber ich bin momentan ziemlich ratlos, wie es weitergeht.

Der Client-Code wurde automatisch von einer Web-Referenz generiert, sodass ich nur eine kleine Menge an Arbeit verrichten muss, um die Nachricht an den Server nicht authentifiziert zu senden:

%Vor%

Ich habe gerade angefangen mit Microsoft.Web.Services3.Security.Tokens.UsernameTokenManager zu forschen, aber bis jetzt konnte ich noch nichts anfangen.

Alle Hinweise würden sehr geschätzt werden, da ich keine guten Rezepte im Netz finden kann.

Danke!

    
csl 26.01.2010, 12:02
quelle

2 Antworten

10

Hat es funktioniert, leider vor dem Lesen Wsanvilles großartige Antwort .

Um anderen zu helfen, stelle ich alle Schritte auf, die ich machen muss, um es mit Visual Studio 2005 zu arbeiten:

  • Installieren Sie WSE 3.0 , wählen Sie benutzerdefiniert und wählen Sie alles
  • aus
  • Lesen Sie Implementieren der direkten Authentifizierung mit dem Benutzernamen-Token in WSE 3.0 für Hinweise
  • Starten Sie Visual Studio 2005 neu, klicken Sie jetzt mit der rechten Maustaste auf Ihr Projekt im Solution Explorer, und Sie sollten einen WSE Settings 3.0 Menüpunkt haben und diesen verwenden, wenn Sie möchten.
  • Aktualisieren Sie Ihre Webreferenzen. Dies sollte eine neue HTTP-Web-Service-Proxy-Klasse mit einem anderen Namen, z. %Code%. Dies entspricht im Wesentlichen der Ausführung von wsewsdl3.exe
  • Verwenden Sie diese neue Klasse, und Sie sollten Zugriff auf WSE-Methoden und -Eigenschaften haben, z. B. YourWsNameHttpServiceWse .

Ich habe fast alles im Code gemacht, anstatt mich auf die Konfigurationsdateien zu verlassen, die mit meiner C # -DLL erstellt wurden. Der Code sah folgendermaßen aus:

%Vor%

Ich habe meine eigene Richtlinie erstellt, die wie folgt aussieht:

%Vor%

Schließlich hat der WebSphere-Server geantwortet, dass Ein erforderlicher Header, der eine Message Addressing-Eigenschaft darstellt, nicht vorhanden ist und die ausgehende Nachricht geprüft wird (mit dem netten Tool Fiddler ) Ich sah die SOAP-Fehlermeldung vom Server, dass der Action-Header fehlte.

Ich habe vergeblich versucht, das SetClientCredential -Element selbst zu setzen:

%Vor%

Das Problem war, dass selbst wenn ich eine Aktion einstelle, wenn sie über das Kabel gesendet wurde, war sie leer. Es stellte sich heraus, dass ich die WSE-Proxy-Klasse öffnen und dort ein Attribut bearbeiten musste:

%Vor%

Danach hat alles gut geklappt.

    
csl 26.01.2010, 14:41
quelle
13

Stellen Sie sicher, dass Ihre Proxy-Klasse von Microsoft.Web.Services3.WebServicesClientProtocol erbt.

Sie können dies tun, indem Sie entweder die Proxy-Klasse selbst ändern oder sie über die Befehlszeile mithilfe von generieren wsewsdl3.exe mit dem Schalter /type:webClient .

Sie können die Anmeldeinformationen dann wie folgt übergeben:

%Vor%

Dies ist, was ich in der Vergangenheit getan habe, um WSE3.0 in Studio 2008 zu bekommen. Hoffe, dass das hilft.

    
wsanville 26.01.2010 13:06
quelle