La connexion à SAP Service Web en C# .NET application

J'ai écrit une Application Windows pour tester une connexion à un client de services web SAP. L'appel de service web nécessite certificat X509 de sécurité.

Après la lecture de divers articles sur internet, je suis venu avec trois façons de joindre le certificat X509 pour l'appel de service web. Malheureusement, toutes ces tentatives de retour a '401 Accès non autorisé'. Cependant, je peux me connecter au service web via l'URL dans IE.

N'quelqu'un a des suggestions quant à ce que j'ai fait de mal? Je suis à l'aide de WSE 3.0 et les trois méthodes que j'utilise joindre le certificat sont les suivantes:-

Certificat

X509Certificate2 oCert = GetSecurityCertificate(oCertificate);  
svc.ClientCertificates.Add(oCert);

Jeton

X509SecurityToken oToken = GetSecurityToken(oCertificate);
svc.RequestSoapContext.Security.Tokens.Add(oToken);

Politique

SAPX509Assertion sapX509Assertion = new SAPX509Assertion(oCertificate, oStoreLocation, oStoreName, oFindType);  
svc.SetPolicy(sapX509Assertion.Policy());

GetSecurityToken() et GetSecuirtyCertificate rechercher le magasin de certificats. Le SAPX509Assertion fait ceci:-

public SAPX509Assertion(String certSubject, StoreLocation oStoreLocation, StoreName oStoreName, X509FindType oFindType)  
{  
    ClientX509TokenProvider = new X509TokenProvider(oStoreLocation,
                                                     oStoreName, certSubject, oFindType);  
    ServiceX509TokenProvider = new X509TokenProvider(oStoreLocation,
                                                     oStoreName, certSubject, oFindType);  

    Protection.Request.EncryptBody = false;  
    Protection.Response.EncryptBody = false;  
} 

Mise à jour
OK, j'ai un WCF appelez maintenant en place. Je ne pouvais pas utiliser le BasicHttpBinding méthode indiquée par Eugarps comme il se plaint que j'étais de la connexion à une adresse https et http attendu...qui a du sens. Le code que j'ai maintenant:-

var binding = new WSHttpBinding();
binding.MaxReceivedMessageSize = int.MaxValue;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
binding.Security.Mode = SecurityMode.Transport;

WCFConnection.CreateAbsenceWSlow.ZWSDHTM_GB_AMS_CREATEABS_lowClient client;
CreateAbsenceWSlow.ZfhhrGbbapiZgeeamsCreateabsResponse response;
CreateAbsenceWSlow.ZfhhrGbbapiZgeeamsCreateabs data;
//Assign address
var address = new EndpointAddress(sUrl);

//Create service client
client = new CreateAbsenceWSlow.ZWSDHTM_GB_AMS_CREATEABS_lowClient(binding, address);

//Assign credentials
client.ClientCredentials.UserName.UserName = sUserName;
client.ClientCredentials.UserName.Password = sPassword;

response = new CreateAbsenceWSlow.ZfhhrGbbapiZgeeamsCreateabsResponse();
data = new WCFConnection.CreateAbsenceWSlow.ZfhhrGbbapiZgeeamsCreateabs();

response = client.ZfhhrGbbapiZgeeamsCreateabs(data);

C'est toujours pas à se connecter au service web SAP. L'erreur que je reçois est "La requête HTTP est autorisée avec le schéma d'authentification client 'Négocier'". J'ai aussi essayé d'utiliser

binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;

qui a retourné une erreur similaire.

Quelqu'un avez des suggestions ou des idées d'où je vais mal?

ZfhhrGbbapiZgeeamsCreateabsResponse... Mes yeux...
Je sais! Pas le plus convivial des conventions de nommage.

OriginalL'auteur grimorde | 2010-09-08