Herstellen von verbindungen mit SAP Web-Service von C# .NET-Anwendung
Ich geschrieben habe, eine Windows-Anwendung zu testen, wird eine Verbindung zu einem Kunden SAP web services. Der web-service-Aufruf benötigt X509-Zertifikat-Sicherheit.
Nach dem Lesen verschiedener Artikel über das internet habe ich drei Möglichkeiten, um befestigen Sie das X. 509-Zertifikat an den web-service-Aufruf. Leider waren alle diese versuche zurück, eine '401 Unbefugten Zugriff". Allerdings kann ich die Verbindung zum web-service über die URL im IE.
Hat jemand irgendwelche Anregungen, was ich vielleicht falsch mache? Ich bin mit WSE 3.0 und die drei Methoden, die ich verwende zum befestigen des Zertifikats sind wie folgt:-
Zertifikat
X509Certificate2 oCert = GetSecurityCertificate(oCertificate);
svc.ClientCertificates.Add(oCert);
Token
X509SecurityToken oToken = GetSecurityToken(oCertificate);
svc.RequestSoapContext.Security.Tokens.Add(oToken);
Politik
SAPX509Assertion sapX509Assertion = new SAPX509Assertion(oCertificate, oStoreLocation, oStoreName, oFindType);
svc.SetPolicy(sapX509Assertion.Policy());
GetSecurityToken() und GetSecuirtyCertificate beide suchen Sie das Zertifikat speichern. Die SAPX509Assertion tut:-
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;
}
Update
OK, ich habe eine WCF-rufen Sie jetzt an Ort und Stelle. Ich konnte nicht verwenden, die "BasicHttpBinding" Methode gezeigt, durch Eugarps, da es sich beschwert, dass ich die Verbindung zu einer https-Adresse und die erwartete http...das machte Sinn. Der code, den ich jetzt habe ist:-
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);
Ist es immer noch nicht, um eine Verbindung zur SAP-web-service. Die Fehler ich erhalte, ist "Die HTTP-Anforderung ist nicht autorisierte mit client-Authentifizierungsschema" Negotiate"". Ich habe auch versucht, mit Hilfe
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
welche zurückgegeben eine ähnliche Fehlermeldung.
Hat jemand weitere Vorschläge oder Ideen, wo ich falsch?
ZfhhrGbbapiZgeeamsCreateabsResponse
... Meine Augen...- Ich weiß! Nicht die meisten Benutzer freundlich von Namenskonventionen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun, das ist alles aus meiner eigenen Erfahrung einige, es kann falsch sein, aber hier ist, wie ich verstehen, den Prozess (erhielt ich keine Unterlagen und meine Firma hatte keinerlei Erfahrung im aufrufenden SAP-bevor ich begann, es zu tun).
SAP-WS Anrufe sind nur von WCF unterstützten BasicHttpBinding, und soweit ich das beurteilen kann, nur mit plain-text-Anmeldeinformationen. Dies bedeutet, dass Sie möchten, um die Verwendung von IPSec oder HTTPS, wenn Sie brauchen, um Ihre Kommunikation privat (außerhalb von intranet -, oder sensitive Daten im intranet). Unsere SAP-server nicht über HTTPS konfiguriert, aber wir verwenden Sie ein VPN mit IPSec für die Kommunikation nach außen. Wichtig zu beachten ist, dass standardmäßig das SAP-GUI auch nicht, dass die Kommunikation privat ist. In dieser situation, Sie sind nicht weniger sicher, indem Sie die Methode unten, als die business-Anwender auf dem Flur, die sich bis sensible Daten in GUI-7.1. Hier ist, wie ich eine Verbindung zu unserer SAP-server intern:
Soweit ich in der Lage gewesen, zu bestimmen, message-level security wird nicht unterstützt, und Bindungen zu anderen als basicHttpBinding (SOAP 1.1) werden nicht unterstützt.
Wie gesagt, das ist alles aus Erfahrung und nicht aus der Ausbildung, also wenn jemand kann etwas hinzufügen, durch Kommentare, so tun Sie dies bitte.
Ich habe vor dem gleichen problem, und es scheint, habe ich gefunden, die Lösung eignet sich auch hier: http://ddkonline.blogspot.com/2009/08/calling-sap-pi-web-service-using-wcf.html.
Leider bin ich nicht in der Lage, die Verwendung der WCF in meiner Anwendung habe ich einen stick mit .NET 2.0 und WSE 3.0, und ich wounder, wenn jemand in der Lage war zu finden, sollution dazu?
Tut Ihr Zertifikat zufällig zugeordnet werden, um einen gültigen Benutzer in der Benutzer-Speicher?
Nach all dieser Zeit, die der client hat endlich jemand, der sich mit dem Thema aus Ihrer SAP-Ende der Dinge. Stellt sich heraus, das WSDL-Dateien, die von uns geliefert wurden, waren falsch, und die Zertifizierung erfolgt war, falsch. Ich reran mein code mit dem neuen WSDL-Dateien und es funktionierte die erste Zeit.