PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VB .Net Webservice SAP Credentials


downforze
2013-12-03, 15:57:12
Hallo. Ich soll für meinen Arbeitgeber einen Dienst implementieren. Der soll Bilder aus SAP holen. Nun hat mir eine Frau eine WSDL erstellt, die ich als Webreference eingebunden habe. Gleichzeitig hat sie mir auch die URL für den Aufruf des Webservice gegeben. Der verlangt einen Namen und ein Passwort. Kann ich manuell eingeben und das scheint auch zu klappen. Mein Problem ist nun, wie ich das im VB vorinitialisiere. Ich bin die Klassen durchgegangen und finde keine Methode oder Eigenschaft, wo ich Name+PW festlegen könnte.

Dim a As New bilderHolen.MaterialGetFilesRequest
'Festlegung Material
a.MaterialGetFilesRequest1 = {"F00CT00014"}
Dim b As New bilderHolen.MaterialGetFiles_InBinding
b.PreAuthenticate = True
b.UnsafeAuthenticatedConnectionSharing = True


b.Url = "hier steht die Adresse"

'b.UseDefaultCredentials = True

Dim c As New bilderHolen.MaterialGetFilesResponse
'hier hole ich die Bilder
c = b.GetFiles(a)

Unfug
2013-12-03, 16:43:55
Dein "b" wird höchstwahrscheinlich vom Typ SoapHttpClientProtocol sein.

Laut MSDN
http://msdn.microsoft.com/de-de/library/system.web.services.protocols.soaphttpclientprotocol%28v=vs.110%29.aspx

kannst du b.Credentials setzen.

Bsp.weise könntest du ein NetworkCredential machen.

b.Credentials = new NetworkCredential(username,passwd)

Weitere infos über NetworkCredentials:
http://msdn.microsoft.com/de-de/library/71b57yke%28v=vs.110%29.aspx

Gruß

RattuS
2013-12-03, 21:36:52
Der verlangt einen Namen und ein Passwort. Kann ich manuell eingeben und das scheint auch zu klappen.
Das klingt nach Basic Auth. Das einfach zu den Credentials meines Vorredners hinzugeben und du hast es geschafft.

Dim crCache As New CredentialCache()
crCache.Add(New Uri("www.example.com"), "Basic", New NetworkCredential("username", "password"))

b.Credentials = crCache

downforze
2013-12-05, 20:32:40
Hallo, ich hatte das Problem am selben Tag selbst noch lösen können und zwar genau so, wie ihr es geschrieben habt.
Hab die Schnittstelle ICredentials benutzt und new NetworkPredential als KLasse genommen.
Dim cred as ICredential = new NetworkCredential (auth, pw)
Die Verbindung paßt, nun gibt es einen Fehler auf Provider-Seite (stand in der Exception). Ich warte nun erst mal auf die Log aus Stuttgart.
Danke für die Hilfe, ihr hattet alle Recht.
PS: DefaultCredentials mußte ich noch auf false setzen.

downforze
2013-12-10, 11:47:47
Fehlerprotokoll habe ich:

<?xml version="1.0" encoding="utf-8" ?>
- <ERROR_CONTEXT>
- <ERROR_INFO>
- <EXCEPTION_INFO>
<TYPE>CX_ST_GROUP_MISSING_CASE</TYPE>
<ERROR_TEXT>Element 'MessageHeader' fehlt</ERROR_TEXT>
- <CX_ST_GROUP_MISSING_CASE>
<MISSING_TYPE>E</MISSING_TYPE>
<MISSING_NAME>MessageHeader</MISSING_NAME>
<MISSING_NAMESPACE />
</CX_ST_GROUP_MISSING_CASE>
</EXCEPTION_INFO>
- <ADDITIONAL_EXCEPTION_DATA>
<TRANSFORMATION_NAME>/1SAI/TXS84233044345ADAF80690</TRANSFORMATION_NAME>
<OFFSET>418</OFFSET>
<XPATH>soap:Envelope(1)soap:Body(1)MaterialGetFilesRequest(1)</XPATH>
</ADDITIONAL_EXCEPTION_DATA>
</ERROR_INFO>
- <PROVIDER_INFO>

Den Messageheader habe ich nicht gesetzt. Muß anscheinend auf Sender-Seite geschehen:

Momentan stehe ich hier:

Dim a As New meinNamespace.MaterialGetFilesRequest
'Festlegung Material
a.MaterialGetFilesRequest1 = {"F00CT00014"}
'Dim mh As New meinNamespace.MessageHeader
a.MessageHeader=?





Als Input habe ich das bekommen:
Input message:
<n0:MaterialGetFilesRequest xmlns:n0="http://hierstehtneURL/Material">
<MessageHeader>
<ID>String 1</ID>
<ReferenceID>String 2</ReferenceID>
<CreationDateTime>1999-05-31T13:20:00Z</CreationDateTime>
<TestDataIndicator>true</TestDataIndicator>
<SenderBusinessSystemID SchemeID="String 3">String 4</SenderBusinessSystemID>
<RecipientBusinessSystemID SchemeID="String 5">String 6</RecipientBusinessSystemID>
</MessageHeader>
<MaterialGetFilesRequest>
<MaterialNumber>F00CT00014</MaterialNumber>
<MaterialNumber>F00CT00015</MaterialNumber>
</MaterialGetFilesRequest>
</n0:MaterialGetFilesRequest>

downforze
2013-12-13, 15:38:56
Habs gelöst. ID und ReferenceID braucht er (müssen gleich sein). CreationDateTime hab ich auf DateTime.Now gesetzt.