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
Vous devez vous connecter pour publier un commentaire.
Maintenant, c'est tous issus de ma propre expérience, de sorte que certains de il peut-être tort, mais voici comment je comprends le processus (je n'ai reçu aucune documentation et ma compagnie n'avait aucune expérience dans l'appel de SÈVE avant j'ai commencé à le faire).
SAP WS appels sont pris en charge uniquement par la WCF BasicHttpBinding, et aussi loin que je peux dire, en utilisant uniquement le texte brut des informations d'identification. Cela signifie que vous souhaitez utiliser IPSec ou HTTPS si vous avez besoin pour faire de votre communication privé (en dehors de l'intranet, ou à des données sensibles au sein de l'intranet). Notre serveur SAP n'a pas de HTTPS configuré, mais on utiliser un VPN avec IPSec pour la communication externe. Important à noter est que, par défaut, l'interface utilisateur SAP également de ne pas faire de la communication privée. Dans cette situation, vous êtes moins sûres en utilisant la méthode détaillée ci-dessous que l'utilisateur de l'entreprise dans le couloir qui est à la recherche de données sensibles dans l'interface graphique 7.1. Voici comment je me connecte à notre serveur SAP en interne:
Aussi loin que j'ai été en mesure de déterminer, au niveau des messages de sécurité n'est pas pris en charge, et des liaisons autres que basicHttpBinding (SOAP 1.1) ne sont pas pris en charge.
Comme je l'ai dit, c'est tout de l'expérience et non pas de la formation, donc, si quelqu'un peut ajouter quelque chose par le biais des commentaires, veuillez le faire.
J'ai été en utilisant le WSE3.0 processus, mais à réécrire en utilisant WCF et votre exemple ci-dessus.
OriginalL'auteur Sprague
J'ai été confronté au même problème et il semble que j'ai trouvé la solution ici: http://ddkonline.blogspot.com/2009/08/calling-sap-pi-web-service-using-wcf.html.
Malheureusement je ne suis pas en mesure d'utiliser WCF dans mon application, je dois tenir .NET 2.0 et WSE 3.0, et je wounder si quelqu'un a pu trouver de solution à cela?
OriginalL'auteur Georgy Smirnov
Votre certificat d'arriver à être mappé à un utilisateur valide dans votre magasin d'utilisateur?
Veuillez demander dans les commentaires à la question, ne posez pas de questions à répondre.
OriginalL'auteur Ken
Après tout ce temps, le client a finalement obtenu de quelqu'un pour traiter la question de leur SÈVE fin des choses. Il s'avère que les fichiers WSDL nous ont été fournies sont incorrectes et la certification avait été mal fait. J'ai rediffusé mon code avec les nouveaux fichiers WSDL et il a travaillé la première fois.
OriginalL'auteur grimorde