Avatar billede spif2001 Nybegynder
17. september 2007 - 10:34 Der er 10 kommentarer og
1 løsning

Application og service på samme tid.

Hej

Jeg har fået en opgave på mit arbejde, hvor jeg skal tage en Windows applikation (som jeg ikke har været med til at lave) og indoperere en service på den.

Det skal virke således, at man udefra programmet skal kunne kontakte det og få nogle oplysninger. Det der kontakter er ikke et .Net program, men kunne f.eks være noget macro / script eller lignende.

Scenariet er, at windows app'en startes af bruger og det starter samtidig servicen. Når windows app'en kører, kan servicen bruges. Når Windows app'en stopper, skal servicen stoppe.

Jeg har før lavet COM+ services (derfor jeg fik opgaven), men jeg kan ikke lige greje, hvordan jeg kan lave en service, som samtidig er et .exe windows program.

Hvordan løser jeg dette?
Avatar billede nielle Nybegynder
17. september 2007 - 10:44 #1
Hvorfor skal der blandes en service ind i det - hvis servicen kun skal køre samtidig med programmet, så kan den jo i princippet helt undværes. Hvorfor ikke bare kommunikere direkte med applikationen selv?
Avatar billede sherlock Nybegynder
17. september 2007 - 10:52 #2
Mener du en windows-service eller en web-service?
Avatar billede spif2001 Nybegynder
17. september 2007 - 10:57 #3
Jo det er vist mere simpelt end jeg regnede med.

Fandt denne MSDN artikel: http://msdn2.microsoft.com/en-us/library/aa645738(VS.71).aspx

Så det er jo egentlig en server og ikke en service vi snakker om her.
Avatar billede nielle Nybegynder
17. september 2007 - 11:18 #4
Man kan sagtens lave en server som en service, men der er også mange andre måder at gøre det på. Desuden behøver en service slet ikke at kune fungers som en server.
Avatar billede spif2001 Nybegynder
17. september 2007 - 12:15 #5
OK - nu har jeg forsøgt med en simpel test som følger:

[CODE]
namespace ProjectService
{
    [Guid("6E80139B-D712-484c-8CF0-1589EC0B5676")]
    public interface IServerCommunicator
    {
        int WriteNumber(int number);
    }

    [Guid("39D7E874-93F4-4834-BA2D-0EB99AB9AE4A")]
    public class ServerCommunicator : IServerCommunicator
    {
        private int returnNumber = 0;
        private Form1.WriteNumberDelegate writer;

        public ServerCommunicator(Form1 f)
        {
            this.writer = new Form1.WriteNumberDelegate(f.WriteNumber);
        }

        public int WriteNumber(int number)
        {
            int i = number + returnNumber++;
            this.writer.Invoke(i);
            return i;
        }
    }
}
[/CODE]

Når jeg compiler den og kører regasm post build eventet, builder det fint.

Men hvordan tester jeg lige om den virker? Har prøvet med et simpelt vbscript, men det    smider en fejl: "...kan ikke oprette objektet: 'ProjectService.ServerCommunicator'"

[VBSCRIPT]
Set o = createobject("ProjectService.ServerCommunicator")
MsgBox o.WriteNumber(10)
[/VBSCRIPT]
Avatar billede spif2001 Nybegynder
17. september 2007 - 13:40 #6
Hmmm...

Jeg kan godt gå ind i Words Visual Basic Editor og finde referencen til ProjectService, men når jeg kigger på den, har den ingen members. Altså den giver ikke mulighed for at kalde WriteNumber().

Any ideas?
Avatar billede arne_v Ekspert
18. september 2007 - 00:57 #7
Det her problem må kunne løses på mange måder.

Men her er er et relativt simpelt :

1)  Du fjerner alt COM fra applikationen
2)  Du tilføjer et remoting server interface til applikationen
3)  Du skriver en COM komponent som er remoting client til det ovenfor
4)  Du bruger den COM komponent i VBS etc.
Avatar billede spif2001 Nybegynder
20. september 2007 - 09:44 #8
Man vil ikke have en "ekstra" service / COM op at køre, så det skal løses fra selve windows applikationen.

Har leget lidt med det her eksempel: http://blogs.msdn.com/adioltean/archive/2004/06/18/how-to-write-a-dcom-server-in-c.aspx

men kan ikke få det til at virke. Mit scenarie er heller ikke helt det sammme, da eksemplet er en service og ikke en windows applikation.

Jeg giver snart fortabt :(
Avatar billede arne_v Ekspert
20. september 2007 - 15:28 #9
Der er ingen ekstra servere i det jeg beskriver.

client app--(in process)--COM----------------(remoting over wire)----------Windows app med remoting server
Avatar billede spif2001 Nybegynder
21. september 2007 - 13:30 #10
Efter en længere snak, blev vi vist enige om at COM / remoting løsningen vil virke for os, men at projektet bliver udskudt... Typisk.

Smid et svar arne_v, da det endte i din løsning.
Avatar billede arne_v Ekspert
21. september 2007 - 15:24 #11
svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester