07. september 2000 - 15:36Der er
13 kommentarer og 2 løsninger
Registrering af DCOM objeckter
Hej med jer.
Jeg er ved at undersøge det her COM i forbindelse med Visual Basic (6.0 Enterprise) for at se om det er noget man kan bruge til noget.
Hvis man kigger på microsofts Enterprise eksempler, så står der under næsten dem alle sammen at de skal kunne køres på netværk uden at ændre en eneste linie kode i forhold til at køre både server og klient delen på en maskine.
Det virker bare ikke. Jeg har læst mig til at Serverobjektet vidstnok skal registrerets på klientmaskinen. Hvordan gør man det?
DCOM er en ret kompliceret affære til tider, og Microsoft skal da også krediteres for at man ikke umiddelbart behøver at ændre noget kode-mæssigt, for at kunne fjern-instantiere objekter.
Desværre kan DCOM i NT (og for slet ikke at tale om Win 9X) være drilsk. Et af de hyppigst forekommende problemer er ballade med sikkerhed inden for et domæne, så - inden jeg vil give dig et eksempel vil jeg bede dig om følgende oplysninger:
1) Hvilket operativsystem kører serveren hhv. klienten på?
2) Har vi tale om en ren klient-til-Server løsning, eller skal du bruge Events ell. Callbacks fra server-komponenten til klienten?
Endelig, i relation til vbmojo\'s svar, skal du bemærke at man *ikke* får DCOM ved at registrere en DLL lokalt, selvom DLL\'n måtte fysisk befinde sig på en anden servers shared drev. Meningen med det hele var jo netop at klienten skulle forespørge serveren om at instantiere komponenten i *serverens* adresserum og derfor benytter man en anden teknik.
1) Windows 98. Jeg sidder og udvikler på en 2000 maskine, men kan ikke komme til at teste det før i morgen. Det er meningen at når jeg er færdig skal det køre i windows 98. Jeg har hentet en DCOM 1.3 på microsofts hjemmeside + tilhørende dcomconfigurator. Det var lige som om det ikke gav så meget.
2) Det jeg sidder og leger med nu benytter call-back. Det er forøvrigt begge ActiveX Exe-filer. Alt hvad jeg har lavet er lavet ud fra det CallBack eksempel der er med Visual Basic
Du behøver ikke nødvendigvis have installeret eller registreret. Du kan nøjes med at lave et CreateObject kald med servernavnet som parameter!!
Det er selvfølgelig en fordel hvis du registrere den eller laver en reference til .tlb filen, der indeholder hvordan komponenten ser ud, ud ad til!! Det vil så sige, at du i VB kan se komponentens interface. Det kan du ikke hvis du ikke registrer den! Der er også den ting, at hvis du laver early binding vil performance være en delt forbedret!! (Det vil sige oprette komponenten via new nøgleorder i VB!)
Det første skridt i DCOM udvikling er altid at teste DCOM uden \"D\", altså at klienten kan kommunikere med serveren på samme maskine. Jeg går ud fra at dette virker i dit tilfælde.
Nu refererer du jo til callback-eksemplet, så det vil jeg benytte som eksempel. I Server-projektet (CbServerProj) gør du nu følgende:
1) Check Remote Server Files under Component tab\'n i Project Properties. Dette vil i næste step producere de nødvendige TLB og VBR filer, som vi skal bruge senere.
2) Byg Serverens exe-fil
3) Gå ind i Project Properties / Component tab\'n og sæt Version Compatibility til Binary og vælg den exe-fil du producerede i step 2
Step 3 sikrer at VB bevarer forskellige GUID\'s for projektet, hvilket er vigtigt hvis / når du senere ændrer serveren.
4) Start klient-projektet op i VB og sørg for at det refererer til \"Call Back Ole Server\" (Brug Project / References)
5) Gentag step 2 og 3, men for klienten denne gang
6) Lav en package (dvs. brug Package & Deployment Wizard\'n), men referer til Clbk_svr.TLB og Clbk_svr.VBR filerne i stedet for Clbk_svr.exe
7) Installer denne package på klient-PC\'en og indtast serverens IP-adresse når du blever bedt om det undervejs i installationsscriptet
8) Kør klienten
Hvis du når så langt uden problemer, er jeg imponeret, men nu har vi da noget konkret at gå ud fra.
Det virker - måske. Jeg har i hvert fald fået det pakket. Jeg skal lige have testet det i dag - når jeg har fået det sendt et sted hen hvor jeg kan teste det.
Kan det ikke lade at ændre den ip adresse der skal connectes efter installationen?
Ja, men hovedproblemet var at skolens (her hvor vi tester) standard rettigheder var sat til shareniveau istedet for på brugernivau. Og så kunne man ikke sætte rettigheder for brugere på serveren og derfor var der ingen der kunne køre noget på serveren.
Det glæder mig at du har fået tingene til at virke. Jeg har et par afrundende bemærkninger.
Som tidligere nævnt er sikkerhed noget af det mest drilske, man kan komme ud for som DCOM-udvikler. Nu hvor du har fået tingene til at virke, burde du nok overveje om de settings i DCOMCNFG for din aktuelle komponent er tilstrækkelige, eller om du måske burde hæve niveauet til det maksimalt mulige. Prøv dig frem her.
Ja god fornøjelse siger jeg bare! Så længe de hele foregår på samme domæne skulle det være muligt!
//Nolle_K
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.