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