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.
InformationsquelleAutor grimorde | 2010-09-08
Schreibe einen Kommentar