Hallo zusammen,
irgendwie gehen mir die Ideen aus..:(
mit dem Code:
try
{
currentClient = new PartnerVerwaltungServiceClient();
currentClient.Endpoint.Address = new System.ServiceModel.EndpointAddress(url);
currentClient.ClientCredentials.UserName.Password = Passwort;
currentClient.ClientCredentials.UserName.UserName = Username;
// Testaufruf für die Prüfung ob Verbindung mit ClientCredentials hergestellt werden kann.
currentClient.Open();
using (var scope = new OperationContextScope(currentClient.InnerChannel))
{
// Create a custom soap header
var msgHeader1 = MessageHeader.CreateHeader("Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "");
var msgHeader2 = MessageHeader.CreateHeader("UsernameToken", "", "");
var msgHeader3 = MessageHeader.CreateHeader("Username", "", "047686");
// Add the header into request message
OperationContext.Current.OutgoingMessageHeaders.Add(msgHeader1);
OperationContext.Current.OutgoingMessageHeaders.Add(msgHeader2);
OperationContext.Current.OutgoingMessageHeaders.Add(msgHeader3);
var res = currentClient.firmenkundeLesen(null);
}
Versuche ich folgende Header Infos hinzu bekommen...
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>die Personalnummer</wsse:Username>
</wsse:UsernameToken>
</wsse:Security>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<firmenkundeLesen xmlns="http://partnerverwaltungservice.ws.hdi.de/service"/>
</s:Body>
</s:Envelope>
Leider klappt es nicht.
Weiß jemand wie man da ran gehen könnte?
VG
Ron
Normalerweise musst Du nur
currentClient.ClientCredentials.UserName.Password = Passwort;
currentClient.ClientCredentials.UserName.UserName = Username;
verwenden, was Du tust sowie im Binding
binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
den Type setzen, was man in Deinem Snippet nicht sieht.
Custom Header kann an der Stelle nicht funktionieren, wenn Du nicht im korrekten Namespace bist.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo Abt,
Vielen Dank für den Hinweis.
Leider bekomme ich die Meldung:
{"Die HTTP-Anforderung ist beim Clientauthentifizierungsschema \"Anonymous\" nicht autorisiert. Vom Server wurde der Authentifizierungsheader \"Basic realm=\"Default Realm\"\" empfangen
Ich hatte den Code nach deinem Hinweis folgendermaßen erweitert:
System.ServiceModel.BasicHttpBinding b = new BasicHttpBinding();
b.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName;
currentClient = new PartnerVerwaltungServiceClient(b, new EndpointAddress(url));
currentClient.ClientCredentials.UserName.Password = Passwort;
currentClient.ClientCredentials.UserName.UserName = Username;
// Testaufruf für die Prüfung ob Verbindung mit ClientCredentials hergestellt werden kann.
currentClient.Open();
currentClient.firmenkundeLesen(null);
Was mache ich nur falsch?
VG
Ron
Was der service da antwortet, ist die challenge für basic authentication. Aus seiner Sicht ist also soweit alles in Ordnung und er erwartet in der Antwort des clients dann die Credentials, die du eingetragen hast.
Nimm mal ein Netzwerk-Traffic-Mitschneide-Tool deiner Wahl (wireshark, fiddler) und guck dir damit an, was dein Client so übers Netz versendet.
(Sollte so aussehen: https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication)
LaTino
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)