none
Webservices aus entfernter DLL RRS feed

  • Allgemeine Diskussion

  • Hallo beisammen,

    ich habe eine Webforms-Anwendung, die aus mehreren Projekten besteht. 3 Projekte bilden den Kern, zu dem weitere Projekte kompiliert werden können (per Konfigurationsmanager). Je nach dem für welchen Kunden ausgeliefert wird, werden also der Kern + gesondert programmierte DLLs erstellt und auf den jeweiligen Server verfrachtet.

    Nun stellt sich ein Problem mit den Webservices (asmx), die ich im Kernprojekt zur Verfügung stelle.
    Diese müssen teilweise auf die jeweiligen Projektdateien zugreifen und geben Klassen zurück, die ebenfalls in den Projektdateien definiert sind. Mal als Beispiel:

        Public Function GetAdr(ByVal term As String, ByVal projectID As String, ByVal rowCount As Long, culture As String) As List(Of SubProject.DataLayer.AdrClass)
            Dim lst As List(Of SubProject.DataLayer.AdrClass)
            Dim bl As New SubProject.BusinessLayer.AdrClass
            i = bl.GetAdr(term, New Guid(projectID), CInt(rowCount), culture)
            Return lst
        End Function

    Nun habe ich dadurch das unangenehme Problem, dass, gegeben durch die Klasse AdrClass eine Abhängigkeit zwischen Kern und SubProject entsteht, die ich auf jeden Fall vermeiden muss.

    Eigentlich müsste die gesamte Methode in das entsprechende SubProject ausgelagert werden. Aber dabei handelt es sich um eine reine Klassenbibliothek.

    Hat jemand einen Kniff, wie ich o.g. umgehen kann?

    TIA
    Thomas

    • Typ geändert Stefan FalzModerator Samstag, 31. August 2013 18:06 Thread ohne wirkliche Lösung abgeschlossen, daher Umwandlung in eine allgemeine Diskussion
    Dienstag, 16. April 2013 16:14

Alle Antworten

  • Hallo,

    zieh doch die Beschreibung der Datenklassen in ein extra Projekt raus, auf das sowohl dein Kern als auch deine Module zugreifen. 

    Das macht natürlich nur Sinn, wenn die Datenklassen auch wirklich nur reine Datenkontainer ohne große Logik sind.


    Andreas Richter
    Softwareentwickler
    http://www.anrichter.net

    Sonntag, 21. April 2013 08:07
  • Hi und Danke für Deine Antwort.

    Wäre es in diesem Falle nicht so, dass der Core eine Abhängigkeit zum Datenlayerprojekt beinhaltet, welches die "AdrClass" beinhaltet, welche wiederum projekteigen ist?

    So wirklich gewonnen hätte ich dann nichts.

    Das eigentlich ärgerliche ist dabei ja, dass ich keinerlei Abhängigkeiten habe, außer der Datenstruktur, welche im Webservice per JSON ausgeliefert werden.
    Damit ergibt sich die merkwürdige Anordnung, dass eine Klasse eines Projektes einen Webservice anfragt. Der Webservice referenziert wiederum eine weitere Klasse eben dieses Projektes, holt die Daten und liefert sie an aufrufendes Projekt aus.

    Irgendwie kommt mir das alles merkwürdig vor :-)

    Momentan habe ich das so gelöst, dass die Webservices über eine #IF CONFIG - Direktive bedingt hinein kompiliert werden. Das löst zwar nicht die Abhängigkeiten, aber zumindest kann ich nach der Kompilierung die nicht benötigten Projekt-DLL's einfach per Hand löschen.

    Gruß
    Thomas

    Sonntag, 21. April 2013 13:00
  • Was tut denn der Webservice? Liest er Daten aus einer Datenquelle, bestückt eine Liste mit Klasseninstanzen und liefert diese Daten per JSON aus?

    Genau dann kannst du doch die Definition der Datenklasse(n) in ein gemeinsam verwendetes Projekt auslagern. Denn sowohl Webservice, als auch Konsument müssen doch die Struktur der Daten (Datenklassen) kennen. Deswegen referenziert doch dein Webservice das aufrufende Projekt?

    Ich habe da mal eine kleine Skizze gemacht, damit meine Gedanken etwas klarer werden:


    Andreas Richter
    Softwareentwickler
    http://www.anrichter.net

    Sonntag, 21. April 2013 16:48
  • Hi,

    soweit richtig, aber ich habe das Problem, dass ich diverse Projekt-DLL's habe, welche, wie gesagt, Ihre eigene Datenlayer und Businesslogik mitbringen.
    Pro Kunde also ein Projekt, welches sein eigenen Datenlayer mitbringt.

    Das Projekt liegt nun einmal bei Kunde1 auf dem Server, ein weiteres mal bei Kunde2. Ergo etwas in dieser Form (nur mal um die Bilderfunktion auszuprobieren :-))

    Selbst wenn ich die Datenlayer auslagern würde, hätte ich immer noch das Problem, dass auf dem Server von Kunde1, im Core der Datenlayer von Kunde2 referenziert würde, weil der Webservice diese Abhängigkeit hat.

    Würde statt dessen innerhalb des Projektes von Mandant1 der Webservice stecken, würde dieses Problem überhaupt nicht auftauchen. Dadurch, dass ich im Core den Webservice anlegen muss, ist aber beim Kompilieren eine Abhängigkeit zu beiden vorhanden.

    Viele Grüße

    Thomas

    Montag, 22. April 2013 09:18
  • Hm. Klingt komisch und sieht auch so aus. Warum ist denn der Webservice im Core? Der kann ja lediglich vom Kunden abhängige Dienste bereitstellen. 

    Von außen betrachtet würde ich in obigen Szenario versuchen den Webservice in die Kunden-Projekte zu verschieben. So wie du es ja selbst schon beschrieben hast. 


    Andreas Richter
    Softwareentwickler
    http://www.anrichter.net

    Montag, 22. April 2013 17:45
  • Hi,

    genau darauf zielte meine Frage. Eigentlich kann ich die Services nicht im Core gebrauchen, die Frage ist, ob eine Klassenbibliothek Webservices bereitstellen kann?
    Das ganze Programm baut auf das Webpartmodell von ASP auf. D.h. alle sämtliche projekteigenen Oberflächen werden als Webparts bereitgestellt, was prinzipiell nichts anderes als große Webcontrols bedeutet.

    Viele Grüße

    Thomas

    Donnerstag, 25. April 2013 12:31