AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) C# Remoting eines ECO PerstistenceMapperProviders über den IIS
Thema durchsuchen
Ansicht
Themen-Optionen

Remoting eines ECO PerstistenceMapperProviders über den IIS

Ein Thema von Schrammel · begonnen am 30. Okt 2006 · letzter Beitrag vom 1. Nov 2006
Antwort Antwort
Schrammel

Registriert seit: 21. Jan 2006
Ort: Koblenz
29 Beiträge
 
Delphi 2006 Architect
 
#1

Remoting eines ECO PerstistenceMapperProviders über den IIS

  Alt 30. Okt 2006, 09:49
Hallo zusammen,

ich habe ein Problem beim Remoting eines ECO PersistenceMapperProviers über den Internet Information Server.

Folgendes passiert:

Ich habe von PersistenceMapperProvider einen RezepteProvider abgeleitet, habe ihm einen ECOSpace-Typ RezepteEcoSpace zugeorndet. diesen ECOSpace lasse ich ein ECO-Package aus einer DLL (RezeptePackage) nutzen.

Das ganze habe ich in eine winforms-Anwendung gepackt, das Remoting aktiviert und: es lief.

Danach habe ich den PersistenceMapper und den EcoSpace in eine DLL ausgelagert, nenne diese RezepteServer.dll und habe dabei folgendes Problem herausgefunden:

Ich weiß nicht mehr, wann ich den EcoSpace erstellen soll. Ich habe dies mal in den Konstruktor des PerstistenceMapperProvider verschoben.

Compilieren - klappt

Nun habe ich beide DLL (RezepteServer und RezeptePackage) nach wwwroot\RezeptServer\bin kopiert.

In der IIS-Steuerkonsole habe ich eine neue Web-Application angelegt, die Nutzungsrechte für den ASP-Nutzer vergeben und in wwwroot folgende web.config angelegt:
XML-Code:
<system.runtime.remoting>
<application>
    <service>
        <wellknown
   mode="SingleCall"
   type="RezepteSpace.RezepteProvider,
RezeptServer"
   objectUri="RezeptProvider.soap" />
 </service>
 <channels>
  <channel
   name="TheChannel"
   priority="100"
   ref="http"
     />
 </channels>
 </application>
</system.runtime.remoting>
Wenn ich nun im IE eingebe:

http://localhost/RezeptServer/RezeptProvider.soap?wsdl

so erwarte, ich dass ich eine Ellenlange xml-Datei angezeigt bekomme. Stattdessen erhalte ich:


System.NullReferenceException: Object reference not set to an instance of an
object.
at
System.Runtime.Remoting.MetadataServices.RealSchem aType.Resolve(StringBuild*er
sb)
at System.Runtime.Remoting.MetadataServices.XMLNamesp ace.Resolve()
at System.Runtime.Remoting.MetadataServices.WsdlGener ator.Resolve()
at System.Runtime.Remoting.MetadataServices.WsdlGener ator.Generate()
at System.Runtime.Remoting.MetadataServices.SUDSGener ator.Generate()
at
System.Runtime.Remoting.MetadataServices.SdlChanne lSink.GenerateSdl(SdlType
sdlType, IServerResponseChannelSinkStack sinkStack, ITransportHeaders
requestHeaders, ITransportHeaders responseHeaders, Stream& outputStream)
at
System.Runtime.Remoting.MetadataServices.SdlChanne lSink.ProcessMessage(ISer*verChannelSinkStack
sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream
requestStream, IMessage& responseMsg, ITransportHeaders& responseHeaders,
Stream& responseStream)
at
System.Runtime.Remoting.Channels.Http.HttpHandlerT ransportSink.HandleReques*t(HttpContext
context)
at
System.Runtime.Remoting.Channels.Http.HttpRemoting Handler.InternalProcessRe*quest(HttpContext
context)

Was soviel heißt, wie: Das aufgerufene Objekt kann nicht erstellt werden.

Ich vermute, dass diese daran liegt, dass ich den EcoSpace nicht rechtzeitig geöffnet bekomme. Hat jeamd eine Idee, wie ich den EcoSpace beretis beim Laden der Dll, vor der Erstellung des ersten RepzepteProviders erstellen kann?

Herzlichen Dank für Eure Bemühungen

Stefan Schramm
  Mit Zitat antworten Zitat
Schrammel

Registriert seit: 21. Jan 2006
Ort: Koblenz
29 Beiträge
 
Delphi 2006 Architect
 
#2

Re: Remoting eines ECO PerstistenceMapperProviders über den

  Alt 1. Nov 2006, 18:21
Ladies und Gentlemänner,

ich habe die Lösung. Aber aus dieser ergibt sich eine neue Frage.
Beim Finden der Lösung hat mir Alois Schmid von www.ecospace.de geholfen. Und die Lösung die geht so:

Es muss eine ECO-Space-Instanz bestehen, wenn der PersistenceMapperProvider erstellt wird. Eine Erstellung im Konstruktur ist zu spät.
Der ECO-Space muss beim Abruf des Providers aktiv sein (blablaSpace.Active = true

Die Erstellung des ECO-Space habe ich für die Testzwecke in ein getrenntes Managerobjekt gesteckt, das auch von MarshalByRefObject abgeleitet sein muss und das von der Client-Applikation erzeugt wird, bevor diese den PersistenceMapperProvider abruft. Dabei muss man aber aufpassen, dass nicht mehrere ECOSpaces erstellt werden. D.h. man packt das ganze in einen Singleton-Pattern.

Nun läuft das Ganze, aber es ist nicht schön.

Schön wäre es, wenn man das Manager-Objekt nicht brauchen würde oder wenn es automatisch (implizit) erzeugt werde nwürde.

Hieraus ergibt sich meine Frage:

Gibt es unter CSharp, so wie unter Delphi die Möglichkeit, einen Code-Abschnitt beim Laden einer DLL automatisch ausführen zu lassen.
Unter Delphi läuft das, so glaube ich, mit dem initilization-Abschnitt.


Herzlichen Dank für Eure Bemühungen und Eure Hilfen


Stefan Schramm
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz