Visual Studio Webservice Client mit BasicAuth (für SAP)

SAP Webservice with .NET Webservice Client and BasicAuthAuch mit SAP lassen sich Webservices aufsetzen. Sogar WSDL-Dateien kann man sich in SAP generieren lassen. Das kam mir gerade recht, als ich die Tage einen Webservice in SAP schreiben sollte, welcher von einem .NET-Programm angesteuert werden soll.

In .NET lassen sich Webservices mittels ihrer WSDL-Datei nämlich sehr angenehm als Webreference einfügen. Das Visual Studio generiert dann eine sogenannte Proxy-Klasse daraus und über diese lässt sich der Webservice dann sehr einfach anprogrammieren.

Soweit in der Theorie. In der Praxis sieht das so aus, dass ich in SAP festlegen musste, wie sich die Nutzer gegenüber dem Webservice authentifizieren sollen. Hier hatte ich mich BasicAuth entschieden. Also eine einfach Authentifizierung mittels Benutzername und Passwort.
Leider hat das Visual Studio das beim Generieren der Proxyklasse nicht so ganz drauf. So bekommt man die freundliche Fehlermeldung

“Die HTTP-Anforderung ist beim Clientauthentifizierungsschema “Anonymous” nicht autorisiert. Vom Server wurde der Authentifizierungsheader “Basic realm=”SAP Web Application Server XYZ”” empfangen.”

entgegen geworfen, wenn man einfach ein Objekt der Proxy-Klasse erstellt und eine Methode aufruft.

SAPwebservice.YS_TEST_SERVICE sapClient = new SAPwebservice.YS_TEST_SERVICE();

sapClient.ClientCredentials.UserName.UserName = "mein_benutzername";
sapClient.ClientCredentials.UserName.Password = "mein_passwort";

int result = sapClient.TestMethode("1234", "Testdaten.Testdaten.Testdaten.");

Dabei hatte ich in weiser Voraussicht sogar schon meinen Benutzernamen und mein Passwort mit übergeben. Und was nun?

Keine Produkte gefunden.

Um der generierten Proxyklasse beizubringen, dass Sie BasicAuth als Authentifizierung gegenüber dem SAP-Webservice nutzen soll, ist es nötig, folgende Parameter an den Konstruktor der Klasse zu übergeben.

using System.ServiceModel;
[...]

//Binding von Hand rekonfiguriert für SAP-Basic Auth
BasicHttpBinding basicAuthBinding = new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);
basicAuthBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;
EndpointAddress basicAuthEndpoint = new EndpointAddress("http://mein_sap_server:mein_port/sap/bc/srt/rfc/sap/mein_webservice?sap-client=mein_mandant&wsdl=1.1");

SAPwebservice.YS_TEST_SERVICE sapClient = new SAPwebservice.YS_TEST_SERVICE(basicAuthBinding, basicAuthEndpoint);

Erstellt man das Binding von Hand, was eigentlich auch so klappen sollte, wenn man ein Objekt der Proxy-Klasse erstellt, so kann die Authentifizierungsmethode angeben. Auf diesem Weg hat man die Chance, dem Proxy zu vermitteln, dass er doch auch die ebenfalls von uns gesetzten Credentials (Nutzername/Passwort) benutzt.

So klappt es dann auch mit dem SAP-Webservice mit BasicAuth und dem .NET/C# Webservice Client.

19 Kommentare

  1. 륤ȥTĥԩ`,ͥTĥԩ`,luxurybrandsale2019
    ֥륬 ԩ`

  2. `ѩ`-֥ ԩ`ʤ ʥ֥ɥԩ`Ʒͨ؜? ǥ`Υ֥ `ѩ`ԩ`֥ Nͨ؜,֥ԩ` Ʒ|褤?ͤ gд棡?“ѩ`ԩ` T,֥ .ץ`ॳԩ`,?`륳ԩ`,å t,֥ɷ.
    㥬`륯 ԩ`

  3. ʥ` `ѩ`ԩ`Ƿʤluxurybrandsale2019ʥ` ʥ` ǥ` ɤޤϟoϤǡƷ|drkross.com2019ʥ` `ѩ`ԩ`,ʥ` ǥ,һ֥ɤζयǤ褦ˡʥ`ڤޤäȤǂƷؤ褦ˤʤޤ
    ƥ ԩ`

  4. ,ͥTĥԩ`,åTĥԩ`,֥T ԩ`ͨ؜,륤ȥT,ͥT,åT,Щ`Х`T, ީ`T, 륤ȥTļ,ͥTļ,륤ȥT.
    ǥ“ ԩ`

  5. ϥ륤ȥԥĥԩ`Ʒؤ˴˚ݤΥ륤ȥԥĥԩ`ҎƷηNN ȡBޤluxurybrandsale2019
    Х?` ԩ`

  6. `ѩ`֥ɥԩ`ͨ؜T! `ѩ`ԩ` luxurybrandsale2019
    ᥬ ԩ`

  7. ϥ륤ȥԥĥԩ`Ʒؤ˴˚ݤΥ륤ȥԥĥԩ`ҎƷηNN ȡBޤamecioc.com֥ɣԥĥԩ`luxurybrandsale2019륤ȥԥĥԩ`륤ȥԥĥԩ`һTΥ֥ɣԥĥԩ`؜ӥåפǤ˚ݥ֥һԩ`T륤ȥ?ԩ`,˚ƷΌT؜ӵǤ륤ȥ?ԩ`,륤ȥԩ`,ԩ`륤ȥ,륤ȥ?ԩ`t , 륤ȥ?ԩ`ǥ`һʥ֥ɥԩ`ᡣ
    ǥ ԩ`

  8. ֥ɥԩ`:åԩ`,ץԩ`,luxurybrandsale2019
    ǥ` ԩ`

  9. T-֥ t ԩ`ͨ؜.ץ\gƷ|^ƤޤǤϥ֥ `ѩ`ԩ`ͨ؜ ֥ ͨ؜ȡQǤ. ץ` ԩ` T_SUPREME `ѩ`ԩ` ֥ åѥ륳ԩ` ? ǥ`Υ֥ `ѩ`ԩ` .
    ԥ ԩ`

  10. ֥ɥԩ`åȥե-֥ ԩ`ʤ ʥ֥ɥԩ`Ʒͨ؜? ǥ`Υ֥ `ѩ`ԩ`֥ Nͨ؜,֥ԩ` Ʒ|褤?ͤ gд棡?“ѩ`ԩ` T,֥ɷ.
    ͥ ԩ`

  11. ձ߼Υ`ѩ`ԩ`֥NƷ؜Ӥnǡluxurybrandsale2019ȫƷ؁!!5u!?` ԩ` hxqiu.com?` ԩ` ک` ˚Ʒʷ⼤!! ͘x߀Ԫ`륹!uƷ!؜ӤνUӤŬޤΥ`ѩ`ԩ`륤ȥ?ͥ롢᥹åܥåƥߥ奦ߥ奦 Х?`ץ`̡`롢֥륬Хåؔԩ`Ʒ|.
    ɥ ԩ`

  12. `ѩ`ԩ`tĴ,luxurybrandsale2019
    ƥե˩` ԩ`

  13. `ѩ`ԩ`؜Q֥ɥԩ`Ʒͨ؜֥ åѥ륳ԩ` 륤ȥԩ`luxurybrandsale2019᥹ԩ`ͥԩ`åԩ`ץԩ` Щ`Х`ԩ`ƥԩ`ǥ`륳ԩ`.˚ݥ֥ɥԩ`ṩ,`ѩ`ԩ`,å ԩ`,t .`ѩ`ԩ` ,ͥ륳ԩ`.
    쥤Х ԩ`

  14. Ʒؤ˴˚ݤΥ륤ȥԩ`,ͥ ԩ`, åԩ`,᥹ԩ`,ץ .
    ȩ` ԩ`

  15. `ѩ` ԩ` ͨ؜Υͥåͨ؜̽륵ȤǤluxurybrandsale2019ֱ̉Ӥһ 2018Ʒ`ѩ` ԩ` T ֥ ԩ` ͨ؜ ,`ѩ` ԩ` Ʒ| 륤ȥ ԩ` ,ͥ ԩ` ,å ߼åԩ`T,륤ȥ?ԩ`TN.
    Х` ԩ`

  16. `ѩ`ԩ`ǥ` ?ԩ`֥ɴͨ؜-`ѩ` ԩ` ͨ؜Υͥåͨ؜̽륵ȤǤluxurybrandsale2019
    ɥ ԩ`

  17. ֥Tĥԩ`,֥ɰTĥԩ`,֥ɷ,֥ɷ ?؜ͨ؜жӌT,luxurybrandsale2019
    ߥ ԩ`

  18. 2019Ʒ`ѩ` ԩ` T ֥ ԩ` ͨ؜ ,`ѩ` ԩ` Ʒ| 륤ȥ ԩ` ,ͥ .˽ϥåץꥫϹڰkͤ.`ѩ`ԩ`2019֥ɷԩ`ȫͨ؜T.
    쥭` ޥå` ԩ`

  19. Hallo,

    besten Dank für diesen Eintrag. Wir hatten auch das leidige Authentifizierungsproblem, und konnten es mit diesen Snippets super lösen. Wir haben noch ein Problem dass wir als Response immer null zurückbekommen, aber ich denke, das liegt eventuell daran, dass wir die Client-Proxys falsch erzeugt haben. als WCF oder so

    lg Michael

Schreibe einen Kommentar zu Anonymous Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.