[Delphi6]Problemen met RemoteDataModule (DCOM)

Pagina: 1
Acties:

  • ProgrammerX
  • Registratie: Juli 2002
  • Laatst online: 26-02-2021
Voor een bepaalde applicatie hebben we een interface moeten bouwen. Het doel van de interface is het ophalen van gegevens uit een externe cobol database. Dus de opzet is een server gedeelte dat de records uit cobol ophaalt en een client gedeelte dat de aanvraag doet naar de server voor deze gegevens.

Nu hebben we gebruik gemaakt van remotedatamodule gezien dit ons perfect leek voor het doel dat we voor ogen hadden. De opzet die we nu gebruiken is als volgt:

Op het server gedeelte maken we gebruik van een adoconnection (ODBC) om de cobol database te gebruiken. We hebben 3 ado queries die de statements bevatten die we gaan gebruiken. Deze ado queries zijn gekoppeld aan dataproviders. Deze dataproviders zijn benodigd voor de koppeling tussen de server en de client.

De client maakt gebruik van clientdatasets. Deze clientdatasets worden dan gekoppeld aan 1 van de dataproviders van de server. De verbinding met de server wordt gelegd via een dcom connectie. De client vult zijn parameters in bij de clientdataset en opent vervolgens deze dataset om de records op te halen via de server.

Dit werkt allemaal perfect en vereist zeer weinig programmeerwerk. Het probleem is dat dit allemaal wordt gebruikt in combinatie met een terminal server op een w2003 server. Bij de opzet die wij hebben op de zaak werkt dit allemaal goed en snel, maar ga ik dit proberen bij de klant dan treden er 3 problemen op:

1) Als de client klaar is met het gebruik van server wordt deze de server applicatie niet afgesloten terwijl dit wel zou moeten (eigenschap van dcom).
2) Als er al een server applicatie draait zouden alle clients eigenlijk gebruik moeten maken van deze ene instantie, maar zodra er een 2de client wordt gestart wordt er ook een tweede server gestart.
3) De data die we terugkrijgen klopt wel precies maar dit is erg langzaam. Gemiddeld duurt het 0,3 sec om de data (in ons geval altijd 1 record) op te halen gemeten vanaf de clientcode.

Ik heb de dcom properties van onze server en die van hun al eens vergeleken, maar hier kan ik eigenlijk geen verschil ontdekken. Bij de terminal server zijn er wel een aantal verschillen maar ik heb hier nog niet mee kunnen testen of dit verschil maakt.

De code voor een test project kan op aanvraag worden gemaild.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 15:35

Tomatoman

Fulltime prutser

DCOM is berucht om zijn ingewikkelde authenticatie, maar dat lijkt me hier niet aan de orde. Je kunt blijkbaar een verbinding opbouwen, zodat de authenticatie al als barrière is gepasseerd.

Ik zou eerder problemen verwachten bij het in het register ingestelde threading model voor de serverapplicatie. Is de registerwaarde
HKEY_CLASSES_ROOT\CLSID\{de Class ID}\LocalServer32\ThreadingModel
misschien ingesteld op een andere waarde dan Apartment?

Een goede grap mag vrienden kosten.