Auch 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?
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.
Maybe in the future it’ll do even better in those areas, but for now it’s a fantastic way to organize and listen to your music and videos, and is without peer in that regard. The iPod’s strengths are its web browsing and apps.
륤ȥTĥԩ`,ͥTĥԩ`,luxurybrandsale2019
֥륬 ԩ`
`ѩ`-֥ ԩ`ʤ ʥ֥ɥԩ`Ʒͨ? ǥ`Υ֥ `ѩ`ԩ`֥ Nͨ,֥ԩ` Ʒ|褤?ͤ gд棡?“ѩ`ԩ` T,֥ .ץ`ॳԩ`,?`륳ԩ`,å t,֥ɷ.
㥬`륯 ԩ`
ʥ` `ѩ`ԩ`Ƿʤluxurybrandsale2019ʥ` ʥ` ǥ` ɤޤϟoϤǡƷ|drkross.com2019ʥ` `ѩ`ԩ`,ʥ` ǥ,һ֥ɤζयǤ褦ˡʥ`ڤޤäȤǂƷؤ褦ˤʤޤ
ƥ ԩ`
,ͥTĥԩ`,åTĥԩ`,֥T ԩ`ͨ,륤ȥT,ͥT,åT,Щ`Х`T, ީ`T, 륤ȥTļ,ͥTļ,륤ȥT.
ǥ“ ԩ`
ϥ륤ȥԥĥԩ`Ʒؤ˴˚ݤΥ륤ȥԥĥԩ`ҎƷηNN ȡBޤluxurybrandsale2019
Х?` ԩ`
`ѩ`֥ɥԩ`ͨT! `ѩ`ԩ` luxurybrandsale2019
ᥬ ԩ`
ϥ륤ȥԥĥԩ`Ʒؤ˴˚ݤΥ륤ȥԥĥԩ`ҎƷηNN ȡBޤamecioc.com֥ɣԥĥԩ`luxurybrandsale2019륤ȥԥĥԩ`륤ȥԥĥԩ`һTΥ֥ɣԥĥԩ`ӥåפǤ˚ݥ֥һԩ`T륤ȥ?ԩ`,˚ƷΌTӵǤ륤ȥ?ԩ`,륤ȥԩ`,ԩ`륤ȥ,륤ȥ?ԩ`t , 륤ȥ?ԩ`ǥ`һʥ֥ɥԩ`ᡣ
ǥ ԩ`
֥ɥԩ`:åԩ`,ץԩ`,luxurybrandsale2019
ǥ` ԩ`
T-֥ t ԩ`ͨ.ץ\gƷ|^ƤޤǤϥ֥ `ѩ`ԩ`ͨ ֥ ͨȡQǤ. ץ` ԩ` T_SUPREME `ѩ`ԩ` ֥ åѥ륳ԩ` ? ǥ`Υ֥ `ѩ`ԩ` .
ԥ ԩ`
֥ɥԩ`åȥե-֥ ԩ`ʤ ʥ֥ɥԩ`Ʒͨ? ǥ`Υ֥ `ѩ`ԩ`֥ Nͨ,֥ԩ` Ʒ|褤?ͤ gд棡?“ѩ`ԩ` T,֥ɷ.
ͥ ԩ`
ձΥ`ѩ`ԩ`֥NƷӤnǡluxurybrandsale2019ȫƷ!!5u!?` ԩ` hxqiu.com?` ԩ` ک` ˚Ʒʷ⼤!! ͘x߀Ԫ`륹!uƷ!ӤνUӤŬޤΥ`ѩ`ԩ`륤ȥ?ͥ롢åܥåƥߥ奦ߥ奦 Х?`ץ`̡`롢֥륬Хåؔԩ`Ʒ|.
ɥ ԩ`
`ѩ`ԩ`tĴ,luxurybrandsale2019
ƥե˩` ԩ`
`ѩ`ԩ`Q֥ɥԩ`Ʒ֥ͨ åѥ륳ԩ` 륤ȥԩ`luxurybrandsale2019ԩ`ͥԩ`åԩ`ץԩ` Щ`Х`ԩ`ƥԩ`ǥ`륳ԩ`.˚ݥ֥ɥԩ`ṩ,`ѩ`ԩ`,å ԩ`,t .`ѩ`ԩ` ,ͥ륳ԩ`.
쥤Х ԩ`
Ʒؤ˴˚ݤΥ륤ȥԩ`,ͥ ԩ`, åԩ`,ԩ`,ץ .
ȩ` ԩ`
`ѩ` ԩ` ͨΥͥåͨ̽륵ȤǤluxurybrandsale2019ֱ̉Ӥһ 2018Ʒ`ѩ` ԩ` T ֥ ԩ` ͨ ,`ѩ` ԩ` Ʒ| 륤ȥ ԩ` ,ͥ ԩ` ,å åԩ`T,륤ȥ?ԩ`TN.
Х` ԩ`
`ѩ`ԩ`ǥ` ?ԩ`֥ɴͨ-`ѩ` ԩ` ͨΥͥåͨ̽륵ȤǤluxurybrandsale2019
ɥ ԩ`
֥Tĥԩ`,֥ɰTĥԩ`,֥ɷ,֥ɷ ?ͨжӌT,luxurybrandsale2019
ߥ ԩ`
2019Ʒ`ѩ` ԩ` T ֥ ԩ` ͨ ,`ѩ` ԩ` Ʒ| 륤ȥ ԩ` ,ͥ .˽ϥåץꥫϹڰkͤ.`ѩ`ԩ`2019֥ɷԩ`ȫͨT.
쥭` ޥå` ԩ`
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