Entwickler-Ecke

Sonstiges (.NET) - Schnittstelle SAP C# funktioniert nicht


IsabelleZimmermann - Mi 26.09.18 09:53
Titel: Schnittstelle SAP C# funktioniert nicht
Hallo zusammen,

ich habe folgendes Problem: Ich habe zwei Dateien in Microsoft Visual Studio. Eine Datei StepByStepClient.cs und eine Datei Program.cs.
Bei Kompilieren wird nur die Datei Program.cs kompiliert. Die erste Datei mit der RFC-Funktionalität von SAP wird nicht kompiliert.
Ohne Fehlermeldung oder sonstige Meldung.

Keine Ahnung warum. habe schon das SDK von der RFC-Bibliothek heruntergeladen, aber es funktioniert immer noch nicht.
Hoffe, dass mir jemand weiterhelfen kann.

Danke.

Viele Grüße,
Isabelle


Moderiert von user profile iconTh69: Topic aus C# - Die Sprache verschoben am Mi 26.09.2018 um 10:05
Moderiert von user profile iconTh69: Titel geändert ("Bekomme keine Daten" entfernt, da es sich [nur] um ein Problem mit dem Aufsetzen des Projektes handelt.)


Th69 - Mi 26.09.18 10:10

Hallo und :welcome:,

überprüfe mal die Eigenschaften der Datei im "Solution Explorer" (Kontextmenü: Eigenschaften / Properties).
Steht dort als "Build Action": "Compile"?


Ralf Jansen - Mi 26.09.18 11:27

Könntest du ein bisschen weiter ausholen? So ohne mehr Details ließt sich das merkwürdig.
Wenn es nicht kompiliert du aber keine Fehlermeldung bekommst heißt das das die Datei auch nicht benutz wird. Sonst würde irgendwas anderes knallen weil Dinge aus dieser Klasse/Datei fehlen.
Wenn es keine Fehlermeldung gibt woher weißt du das die nicht kompiliert wurde? Deine Überschrift klingt auch eher nach einem funktionalen Problem das nichts damit zu tun hat ob da was kompiliert oder nicht.


IsabelleZimmermann - Mi 26.09.18 11:33

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome:,

überprüfe mal die Eigenschaften der Datei im "Solution Explorer" (Kontextmenü: Eigenschaften / Properties).
Steht dort als "Build Action": "Compile"?


Wie komme ich denn auf Eigenschaften/Properties in der Datei? Ich bin vorher unter Debugging/Optionen gegangen. Gibt es dort auch einen Solution Explorer?

Moderiert von user profile iconTh69: Beiträge zusammengefasst

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Könntest du ein bisschen weiter ausholen? So ohne mehr Details ließt sich das merkwürdig.
Wenn es nicht kompiliert du aber keine Fehlermeldung bekommst heißt das das die Datei auch nicht benutz wird. Sonst würde irgendwas anderes knallen weil Dinge aus dieser Klasse/Datei fehlen.
Wenn es keine Fehlermeldung gibt woher weißt du das die nicht kompiliert wurde? Deine Überschrift klingt auch eher nach einem funktionalen Problem das nichts damit zu tun hat ob da was kompiliert oder nicht.


Ich sehe es an der Consolenausgabe, dass die Datei nicht kompiliert wurde. Weil nur die Consolenausgabe der anderen Datei erscheint.
Ja, ich denke die Datei wird nicht benutzt. Aber ich verstehe eben nicht warum.


Th69 - Mi 26.09.18 12:00

Ich meine so wie im 2. Bild: Visual studio solution explorer not showing form cs file [https://stackoverflow.com/questions/32916624/visual-studio-solution-explorer-not-showing-form-cs-file] (es geht mir nur um das Bild mit dem Kontextmenü, der eigentliche Beitrag ist hierfür irrelevant).

Auf deutsch heißt der "Solution Explorer" m.E. "Projektmappenverwaltung" oder so ähnlich.

PS: Und gestern hatte ich unter Bilder werden nicht angezeigt [https://www.entwickler-ecke.de/viewtopic.php?p=713291#713291] einen Link zu dem Eigenschaftsfenster (u.a. "Build Action") gepostet.

Ansonsten: Was für einen Projekttyp hast du denn (Konsole, WinForms, WPF)?


IsabelleZimmermann - Mi 26.09.18 13:20

Achso, danke. Ich hab den Projekttyp Konsole. Die Projektmappenverwaltung hab ich gefunden und da hab ich auch die 2. Datei "StepByStepClient.cs" jetzt eingefügt.
Das kompilieren funktioniert jetzt soweit.
Allerdings hab ich noch sehr viele Fehler, weil wahrscheinlich eine Bibliothek fehlt.

Solche Ausdrücke wie RfcDestination und RefcDestinationManager werden nicht gefunden.

Was kann ich da tun?

Moderiert von user profile iconTh69: Vollzitat entfernt.
Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Mi 26.09.18 14:01

Dir geht es um die Integration des "SAP .NET Connectors"?
Dann schau mal in den (englischen) Beitrag Step by step tutorial to use SAP. net Connector with VS 2008 [https://stackoverflow.com/questions/5300049/step-by-step-tutorial-to-use-sap-net-connector-with-vs-2008] - besonders unter "Referencing", d.h. du benötigst wohl noch die Verweise auf die externen Assemblies (DLLs) - "Add Reference" heißt auf deutsch dann "Verweis hinzufügen".


IsabelleZimmermann - Mi 26.09.18 14:28

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Dir geht es um die Integration des "SAP .NET Connectors"?
Dann schau mal in den (englischen) Beitrag Step by step tutorial to use SAP. net Connector with VS 2008 [https://stackoverflow.com/questions/5300049/step-by-step-tutorial-to-use-sap-net-connector-with-vs-2008] - besonders unter "Referencing", d.h. du benötigst wohl noch die Verweise auf die externen Assemblies (DLLs) - "Add Reference" heißt auf deutsch dann "Verweis hinzufügen".


Ich hab das Dokument angeschaut aber leider kann ich die entsprechenden Verweise sapnco.dll und sapnco_utils.dll nicht in mein Projekt hinzufügen.
Wenn ich auf Verweise hinzufügen gehe und dann auf suchen wird "sap.." nicht gefunden.


IsabelleZimmermann - Mi 26.09.18 15:09

Moderiert von user profile iconTh69: Vollzitat entfernt.


Ralf Jansen - Mi 26.09.18 15:29

Laut deinem Bild hast du die dll's als Datei hinzugefügt und nicht als Verweis. Die muss schon als Verweis unter dem entsprechenden Verweis-Knoten im Projektmappen-Explorer auftauchen damit das zur Designzeit gefunden und benutzt werden kann. Versuch dich nochmal an der "Verweis hinzufügen" Methode die du im Kontextmenü des Verweis-Knotens im Projektmappen-Explorer finden solltest.


IsabelleZimmermann - Mi 26.09.18 15:49

Danke. Weisst du zufällig noch in welcher Bibliothek ich das Objekt TidStore finde?
Dann hab ich alle Fehler beseitigt.

Moderiert von user profile iconTh69: Vollzitat entfernt.


Th69 - Mi 26.09.18 17:43

Ich finde leider auch keine Hinweise auf TidStore im Internet (außer ein paar lesegeschützte Dokumente).
Aber laut SAP Integration with .Net 4.0 (SAP Connection Manager) [https://www.codeproject.com/Tips/521485/SAP-Integration-with-Net-4-0-SAP-Connection-Manage] gibt es wohl noch die "SAPConnectionManager.dll".

PS: Und bitte keine Vollzitate hier verwenden, sondern wenn dann relevante Teilzitate, danke. Unten links gibt es den "Antworten"-Button ohne Zitieren.


IsabelleZimmermann - Do 27.09.18 07:39

Danke.

ich werden den SAPConnectionManager.dll herunterladen.


Th69 - Do 27.09.18 08:27

Sorry, ich war gestern wohl noch etwas neben der Spur (bin erkältet gewesen).

Ich dachte die "SAPConnectionManager.dll" gehört auch zum SAP SDK, aber diese ist ja eine selbstgeschriebene Komponente des Autors des Artikels.

Aber unter SAP Connector for Microsoft .NET [https://support.sap.com/en/product/connectors/msnet.html] gibt es auch ein "Programming Guide" und wenn ich darin die Sätze
Zitat:
The methods ExampleTrfcClient() and ExampleBgrfcClient() plus their related helper methods and helper classes illustrate a quite complex example of how to achieve end-
to-end transactional security. For understanding the logic of tRFC/qRFC/bgRFC calls, you don’t need to understand, how the TidStore class works internally. Just consider it as a “poor man’s database”, that was added in order to be able to show a fully functional command line example. However, in your own applications you should let a different class based on a real database take over that task.

...

The tutorial ZIP archive provides a code sample (StepByStepClient.cs) showing how to implement a .Net Connector RFC client program performing the following steps: ...
richtig verstehe, dann ist das einfach eine Klasse aus diesem Beispielcode (und die du dann bei einer realen Anwendung durch eine echte Datenbank-Anbindung ersetzen solltest).

In der Tutorial-ZIP-Datei befindet sich dann auch die Klasse "TidStore.cs" (die du also auch lokal schon haben solltest, da du ja die "StepByStepClient.cs" verwendest)...


IsabelleZimmermann - Do 27.09.18 10:49

Also ich habe jetzt die Tid.cs eingebunden und habe jetzt beim Kompilieren keinen Fehler.

Allerdings zur Laufzeit bekomme ich den Ausnahmefehler, dass die Bibliothek sapnco.dll nicht gefunden wird.

Wie binde ich die Bibliotheken richtig ein?
Unter dem Projektmappenverzeichnis rechts sind sie schon hinzugefügt.

ich schicke mal einen screenshot von meiner Ordnerstruktur des Projekts im Explorer. Vielleicht muss ich da noch was ändern?


Ralf Jansen - Do 27.09.18 11:01

Warum liegen die Abhängigkeiten in einem lib Ordner unterhalb des Ausgabeordners? Zur Laufzeit gibt es für die Net Runtime erstmal keinen Grund da rein zu schauen außer du hast in den Lademechanismus der Runtime eingegriffen und diesem gesagt das es neben den üblichen Stellen (Programm Ordner, aktueller Ordner, Path, GAC etc.) auch dort seine Abhängigkeiten suchen sollen.

Das Standardverhalten von .Net ist erstmal die Abhängigkeiten die mit der Anwendung verteilt werden müssen im gleichen Ordner zu halten wie die eigentliche Applikation (Ausnahme Ressourcen/Satelliten Assemblies).


IsabelleZimmermann - Do 27.09.18 11:12

Soll ich dann gar keine Bibliotheken in den Projektordner stellen?
Auch nicht unterhalb des Projektordners? Siehe Bild.
Den lib ordner unterhalb des Ausgabeordners hab ich jetzt gelöscht.


Ralf Jansen - Do 27.09.18 11:17

Der Projektordner ist zur Laufzeit egal. Aber die Abhängigkeiten die du benötigst liegen entweder bereits an einem Ort der automatisch durchsucht wird zum Auflösen der Abhängigkeiten oder du solltest die direkt in den Anwendungsordner kopieren. Während der Entwicklung ist das der Projektausgabeordner der standardmäßig bin heißt. Die Sachen die du nach bin/lib geschoben hast sollten also eher direkt in bin liegen.


IsabelleZimmermann - Do 27.09.18 11:38

Wie finde ich denn heraus, ob es einen Ort gibt der automatisch wird zum Auflösen der Abhängigkeiten?
Vielleicht fehlt ja dort noch die Bibliothek sapnco.dll?


Wenn ich das richtig verstehe, ist der Anwendungsordner der Projektausgabeordner der standardmäßig bin heißt.


Th69 - Do 27.09.18 13:55

Du hast doch die beiden DLLs "sapnco.dll" und "sapnco_utils.dll" als Verweis zu deinem Projekt hinzugefügt. Schau mal in die Eigenschaften dieser beiden Dateien, wie "Copy to Output Directory" eingestellt ist - stelle es mal für beide Dateien auf "Copy, if newer" (dann werden sie automatisch beim Kompilieren in den Ausgabeordner "bin" kopiert, wenn nicht schon vorhanden).

PS: Auf deutsch, da du ja laut Screenshot ein deutsches VS benutzt (auch wenn man als Entwickler besser die englische Version benutzt): "Ins Ausgabenverzeichnis kopieren" -> "Kopieren, wenn neuer".


IsabelleZimmermann - Do 27.09.18 15:59

Fehlermeldung ist folgende, siehe Screenshot. Hab jetzt "lokale Kopie" eingestellt bei den Eigenschaften.

"Ins Ausgabenverzeichnis kopieren" hab ich leider nicht gefunden.


IsabelleZimmermann - Do 27.09.18 16:06

Hab gerade noch mal nachgeschaut. Bei Lokale Kopie steht unten drunter "Gibt an, ob der Verweis in das Ausgabeverzeichnis kopiert wird".
Dann müsste das soweit passen.
Aber leider ist die Fehlermeldung noch nicht weg.


Th69 - Do 27.09.18 16:59

Puh, das scheint ein langer Weg zu werden...

BadImageException bedeutet (oftmals), daß du die falsche Ziel-Platform (x86 statt x64 oder umgekehrt) benutzt bzw. die falschen DLLs (d.h. das falsche SDK).
Das steht auch unten im Text (s. "Notes") bei dem von mir schon verlinktem Step by step tutorial to use SAP. net Connector with VS 2008 [https://stackoverflow.com/questions/5300049/step-by-step-tutorial-to-use-sap-net-connector-with-vs-2008].

PS: Stimmt, bei Verweisen heißt es "Lokale Kopie".

PPS: Ist dies dein erstes (.NET-)Projekt??? Eigentlich gehört die Projektverwaltung zu den Grundlagen (also was man bei den ersten Konsolenprojekten so mitlernt).


Ralf Jansen - Do 27.09.18 17:00

BadImageFormat bezieht sich darauf das die Bittigkeit der Abhängigkeiten nicht passt. Also entweder startest du deine Anwendung als 64-Bit Prozess dein SAP Dll sind aber 32-Bit Versionen oder umgekehrt.
Zum testen kannst du in deinen Projektoptionen unter Build mal das Plattform Target explizit setzen.


IsabelleZimmermann - Do 27.09.18 17:19

Ja, das ist mein erstes .NET-Projekt.

Moderiert von user profile iconTh69: Beiträge zusammengefasst

Jetzt komme ich in die Methode rein.
Aber ein neuer Fehler tritt auf.

Wie bekomme ich diesen Fehler weg?


Ralf Jansen - Do 27.09.18 17:43

Das sieht jetzt zumindest so aus als wäre dein Projekt kompilierbar und alle Abhängigkeiten sind da und benutzbar.

Das Problem ist jetzt was SAP spezifisches. Das kann man vermutlich nur mit SAP Kenntnissen bzw. mit der Dokumentation zum SAP Konnektor lösen wie man den Zugriff auf das System konfiguriert und nicht mit allgemeinen C# Programmierkenntnissen die wir hier haben.


Edit:

https://support.sap.com/content/dam/support/en_us/library/ssp/products/connectors/msnet/dotnet_connector_30_programming_guide.pdf
Vermutlich Seite 26/27


IsabelleZimmermann - Fr 28.09.18 08:00

Danke für das Dokument zum Connector.

Allerdings bekomme ich die App.config nicht so modifiziert wie dort angegeben:

XML-Daten
1:
2:
3:
<destinations>
<add NAME="NCO_TESTS" USER="MYUSER" PASSWD="1234567" CLIENT="100" LANG="EN" ASHOST="hostname" SYSNR="00" POOL_SIZE="5" MAX_POOL_SIZE="10"/>
</destinations>


Moderiert von user profile iconTh69: XML-Tags hinzugefügt


Th69 - Fr 28.09.18 09:36

Was meinst du genau damit?

In der Tutorial-ZIP-Datei befindet sich auch eine "app.config", welche du einfach verwenden kannst (die 3 Zeilen alleine reichen nicht aus!). Du mußt selbstverständlich dann noch die passenden USER, PASSWD, ASHOST eintragen, um Zugang zu eurem SAP-System zu erhalten (was CLIENT und SYSNR allerdings bedeutet, weiß ich nicht - POOL_SIZE sowie MAX_POOL_SIZE beziehen sich auf die Anzahl der gleichzeitigen Verbindungen/Connections).


IsabelleZimmermann - Fr 28.09.18 10:12

Fehlermeldung, dass hostname "local" nicht bekannt ist.
Wie finde ich denn richtigen Hostnamen heraus?


IsabelleZimmermann - Fr 28.09.18 10:40

Hallo,

den Hostnamen hab ich jetzt herausgefunden.

Allerdings ist die angegebene IP-Adresse nicht erreichbar.
Internet funktioniert und an der Firewall kann es auch nicht liegen.


Th69 - Fr 28.09.18 10:53

Da solltest du dich wohl an deinen Projektleiter bzw. Admin wenden.


IsabelleZimmermann - Fr 28.09.18 10:57

Ok, mach ich.