HEJ! Jag antar att du menar att du vill anropa servicen, medans den kör, från ett annat program för att t.ex. hämta info från den. Svaret är nja, det går men är inte så enkelt som du kanske skulle vilja. Jag är ej helt säker på om detta fungerar till 100% men då du instansierar din service kör du en casting med ett interface som du nyttjat i din service. På så vis når du metoderna. Var dock ett tagsedan jag testade detta, så jag vet ej hur det fungerar under skarp version, utförde test under beta 1 på detta sätt, men då kunde man referera till exe-filer vilket jag gjorde. Dock är ju servicens syfte att du inte skall behöva anropa den förutom de standardmetoder som finns. Det finns två sätt att göra detta på, du kan tex använda Remoting som Mattias beskrev eller använda ExecuteCommand som finns i ServiceController klassen. Men du kan bara skicka in en int med du får tyvärr inte tillbaka något värde. Om ditt syfte är att enbart köra en metod i din tjänst och denna metod inte ska returnera något så är detta ett perfekt att göra anropet på. Gjorde en test med Casting, det gick inte. Vet ej varför MS skall krångla till det så när de bygger saker :-) Tycker det vore en självklarhet att kunna komma åt metoder i en service. Men det finns säkert något kul argumnet varför.??? Tackar för alla svar!Windows Service
Har provat att skapa en Windows Service i VB.NET och kunnat debugga den.
Om man skapar en Public Function i denna kan man då via ett annat program anropa den?
/AlexanderSv: Windows Service
Du kan använda din service som host för objekt som accessas via .NET Remoting. Genom att använda konfigurationsfiler så kan du låta din service agera host, det enda du måste göra är att initiera .NET Remoting funktionaliteten. Det gör man genom ett anrop till RemotingConfiguration.Configure.
Du kan antingen koda in i din service vilka klasser som exponeras, eller så kan du använda config filer för att styra det dynamiskt. I ditt fall är det kanske ok att koda det eftersom det är en specifik klass du vill exponera.
Kolla på exemplen under: C:\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\Technologies\Remoting.
Kolla i SDK efter info om .NET Remoting i allmänhet eller på ett exempel med rubriken "Remoting Example: Dynamic Publication".
Hoppas detta hjälper!
/MattiasSv: Windows Service
Statusar m.m. kan man lagra i någon datakälla som ens andra program sedan läser av.
Annars kan du komma åt dem via servicen, tror metoden heter ExecuteCommand eller liknande, dock kan du bara ge ett index värde på den metod du vill anropa, lite klurigt.
//Johan NSv: Windows Service
Du gör följande för att använda ExecuteCommand:
I din kod som ska anropa servicen skriver du följande:
<code>
System.ServiceProcess.ServiceController sc = new System.ServiceProcess.ServiceController("Namnet på din tjänst");
sc.ExecuteCommand(200);
</code>
I din tjänst använder du dig av OnExecuteCommand:
<code>
protected virtual void OnCustomCommand(int command);
{
if( command == 200 )
RunMyMethod();
}
</code>
OBS! Du kan bara skicka in ett tal mellan 128 och 256 i ExecuteComamnd. Under 128 är reserverade.
/Fredrik NSv: Windows Service
De alternativ som återstår är ExecuteCommand. Remoting som Mattias pratade om
samt ev se till så servicen lagrar data i en datakälla som du lite då och då läser av.
Om det nu är data du vill komma åt.
//Johan NSv: Windows Service
Det jag/man önskar är att även kunna få tillbaka något...