C# - Webszerveren található komponens elérése

Windows Script Component lehetőségei 2. rész

forráskód letöltése
A sorozat ezt megelőző számában megismerkedhettünk a Windows Script Component alapjaival. Megtudhattuk, hogyan lehet az objektum számára property-ket, metódusokat létrehozni, valamint a komponenst egy script állományból elérni, és példányosítani. Mai cikkünkben megismerhetjük annak módját, hogyan érhetünk el komponenst akkor, ha az egy távoli szerver valamelyik virtuális könyvtárában található.
Mellékelt példa megnyitása előtt szükséges egy VirtualDirectory nevű virtuális könyvtár létrehozása, mely a példa könyvtárára mutat. Ehhez nyissa meg a mellékelt mappában található VirtualDirectory alkönyvtár Tulajdonság ablakát és itt a Webmegosztás lapon engedélyezze a mappa megosztását olvasási és parancsfájlok futtatási jogával.
A mellékelt alkalmazás indítása előtt a VirtualDirectory mappával, mint fizikai könyvtárral létrehozunk egy virtuális könyvtárat, melyben elhelyeztük a programból meghívandó RemoteComponent komponens állományát, a RemoteComponent.wsc fájlt. Így modellezzük, hogy az objektum egy távoli mappában van.
A Windows-os alkalmazásunkból futtatjuk a mappájában található WSC02.js parancsállományt, melyben létrehozunk egy példányt a kvázi távoli komponensből, majd meghívjuk annak CreateVirtualDirectory metódusát annak érdekében, hogy a megadott névvel, és a megadott fizikai mappával létrehozzunk a Webszerverünkön (IIS) egy virtuális könyvtárat.
A Form szerkesztőmezőiben kell megadnunk a virtuális könyvtár nevét, valamint a fizikai elérési útvonalat. Amennyiben olyan mappanevet adunk meg, amely nem létezik, akkor elegendő bejelölnünk a jelölőnégyzetet, és a metódus létrehozza helyettünk.
A komponens
A komponensünket a múlt részben megismert Windows Script Component Wizard kisalkalmazással hoztuk létre.
Rendelkezik a szabványos regisztrációs adatokkal:
<?xml version="1.0"?>
<component>
<?component error="true" debug="true"?>
<registration description="RemoteComponent" progid="RemoteComponent" version="1.00"
  classid="{1439c076-7319-46fc-b844-85945c32a657}">
</registration>
A komponensünk három, csak-írható property-vel rendelkezik, melyek közül a VirtDirName property-ben kell megadnunk a létrehozandó virtuális mappa nevét, a Path property-ben kell specifikálnunk a megadott néven megosztott mappa elérési útvonalát.
  <property name="VirtDirName"><put/></property>
  <property name="Path"><put/></property>
Az IsCreate property-ben kell megadnunk, hogy a metódus létrehozza-e a megadott könyvtárat, vagy az már létezik, és a művelet kihagyható:
  <property name="IsCreate"><put/></property>
A metódus deklarációja:
  <method name="CreateVirtualDirectory">
  </method>
A függvényben először ellenőrizzük, hogy az IsCreate property 1 értékű, vagy 0. 1 esetén létrehozzuk a szerkesztőmezőben megadott mappát:
function CreateVirtualDirectory()
{
  if (IsCreate == 1)  
  {
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    fso.CreateFolder(Path);
  }
Elérjük az IIS-t:
  var wwwRoot = ActiveXObject("IIS://localhost/W3SVC/1/ROOT");
Elkészítjük a virtuális könyvtárat:
  var virtualDir = wwwRoot.Create("IIsWebVirtualDir", VirtDirName);
Megadjuk a mappa fizikai elérési útvonalát:
  virtualDir.Path = Path;
És létrehozzuk:
  virtualDir.SetInfo();   
}
Alkalmazás
A programból egyszerűen futtatjuk a WSC02.js parancsállományt. Ehhez a Process osztályt használjuk fel, közvetve pedig a WScript.exe futtatóalkalmazást érjük el. Parancssori argumentumként átadjuk a mezők nevét, valamint 1-et, ha a jelölőnégyzet jelölt, és 0-át, ha nem. A futtatás feltételeit egy ProcessStartInfo objektumban helyezzük el:
ProcessStartInfo psi = new ProcessStartInfo();
psi.Arguments = textBox1.Text + " " + textBox2.Text + " " + t.ToString();
psi.FileName = Application.StartupPath + "\\Wsc02.js";
Process.Start(psi);
A parancsállomány
A WSC02.js állományban lekérdezzük az átadott paramétereket, majd példányosítjuk a távoli komponensünket:
var args = WScript.Arguments;
try
{
  var oComp = GetObject("script:http://localhost/VirtualDirectory/RemoteComponent.wsc");
Látható, hogy itt nem a WScript objektum CreateObject metódusát kell használnunk. Paraméterként a komponens URL-jét kell megadnunk.
Megadjuk a komponens property-jeinek értékét:
  oComp.VirtDirName = args(0);
  oComp.Path = args(1);
  oComp.IsCreate = args(2);  
}
catch(e)
{
  ...
}
Majd meghívjuk a komponens metódusát:
oComp.CreateVirtualDirectory();
A művelet eredményeképpen megosztásra kerül a megadott fizikai mappa.
Ezt az IIS konzolja segítségével is ellenőrizhetjük.

Windows Script Component lehetőségei cikksorozat