.Net ทำสิ่งนี้ได้ดีมากสำหรับเราจริงๆ FCL มีคลาสมากมายเพื่อช่วยเราทำงานนี้ให้สำเร็จ ทำให้งานการพัฒนาของเราเรียบง่ายและมีความสุขมาก จริงๆ แล้วการเขียนโปรแกรมเพื่อควบคุม IIS นั้นง่ายมาก เช่นเดียวกับ ASP .Net จำเป็นต้องใช้ ADSI เพื่อใช้งาน IIS แต่ในเวลานี้เราไม่ต้องการ GetObject อีกต่อไป เพราะ .Net มอบสิ่งใหม่ๆ พร้อมฟังก์ชันที่ทรงพลังยิ่งขึ้นให้กับเรา
เนมสเปซ System.DirectoryServices มีบางสิ่งที่มีประสิทธิภาพ - DirectoryEntry, DirectoryEntries ซึ่งทำให้เรามีฟังก์ชันที่มีประสิทธิภาพในการเข้าถึง Active
Directory พูดคุยเกี่ยวกับการควบคุมของ IIS ที่นี่ โดยทั่วไปเมื่อเราใช้งาน IIS เรามักจะใช้งานไดเร็กทอรีเสมือน ดังนั้นฉันจะแสดงรายการนี้เป็นเนื้อหาหลัก
ก่อนอื่น เราต้องเข้าใจโครงสร้างลำดับชั้นของ IIS ต่อไปนี้เป็นรูปภาพที่ฉันพบจากต่างประเทศ ซึ่งอธิบายโครงสร้างลำดับชั้นของ IIS ได้เป็นอย่างดี:
[htmChina:Image id=Image1|12][/htmChina:Image]
เพื่อให้เข้าใจไวยากรณ์การควบคุมของ IIS เราต้องเข้าใจรูปด้านบนและเข้าใจโครงสร้างลำดับชั้นของข้อมูลเมตาของ IIS (Metabase) แต่ละโหนดในกราฟเรียกว่าคีย์ และแต่ละคีย์สามารถมีค่าได้ตั้งแต่หนึ่งค่าขึ้นไป ซึ่งเป็นสิ่งที่เราเรียกว่าคุณสมบัติ คีย์ในข้อมูลเมตาของ IIS นั้นสอดคล้องกับองค์ประกอบใน IIS ดังนั้นการตั้งค่าของแอตทริบิวต์ ค่าในข้อมูลจะส่งผลต่อการตั้งค่าใน IIS นี่คือแนวคิดพื้นฐานและแกนหลักของการเขียนโปรแกรมของเรา
นอกจากนี้ คุณยังต้องเข้าใจแนวคิดของสคีมาด้วย แสดงถึงชื่อของสถาปัตยกรรมใน IIS นั่นคือคุณสามารถเข้าใจประเภทของคีย์ในข้อมูลเมตาของ IIS ได้ โดยเฉพาะประเภทของแต่ละโหนด เรารู้ว่ามีไดเร็กทอรีเสมือน, ไดเร็กทอรีธรรมดา และไฟล์ใน IIS และสิ่งเหล่านี้คือองค์ประกอบทั้งหมดของ IIS และป้ายกำกับที่แยกความแตกต่างคือ Schema ตัวอย่างเช่น Schema ของไดเร็กทอรีเสมือนคือ "IIsVirtualDir" และไดเร็กทอรีปกติคือ "IIsWebDir" ด้วยวิธีนี้ เมื่อเราเพิ่มหรือลบไดเร็กทอรี IIS จะรู้ว่าเรากำลังเพิ่มไดเร็กทอรีเสมือนหรือไดเร็กทอรีปกติ
การสร้างไดเร็กทอรีเสมือน
DirectoryEntry เป็นของขวัญที่ยอดเยี่ยมที่ .Net มอบให้เรา เรารู้ว่าฟังก์ชันของมันเพียงแค่ใช้ชื่อ - รายการไดเร็กทอรี ใครก็ตามที่เคยใช้ ADSI จะรู้ดีว่าเมื่อใช้งาน IIS และ WinNT เรายังจำเป็นต้องจัดเตรียม Path ของพวกเขาด้วย เมื่อใช้งาน IIS รูปแบบของ Path นี้คือ:
IIS://ComputerName/Service/Website/Directory
ComputerName: นั่นคือ ระบบปฏิบัติการ เซิร์ฟเวอร์ ชื่อสามารถเป็นชื่อหรือ IP ที่ใช้กันมากที่สุดคือ localhost
บริการ: เซิร์ฟเวอร์ที่ดำเนินการ มีบริการ Web, FTP และ SMTP ใน IIS เราใช้งานฟังก์ชันเว็บของ IIS เป็นหลัก ดังนั้นนี่คือ "W3SVC" หากเป็น FTP ก็ควรเป็น "MSFTPSVC"
เว็บไซต์: บริการ IIS สามารถรวมหลายไซต์ นี่คือไซต์ที่ใช้ในการตั้งค่าการดำเนินการ ค่าของมันคือตัวเลข ค่าเริ่มต้นคือ 1 ซึ่งระบุไซต์เริ่มต้น หากมีอื่นๆ ให้เริ่มจาก 1 ไปเรื่อยๆ
ไดเรกทอรี: จำเป็นต้องพูด มันเป็นชื่อของไดเรกทอรีสำหรับการดำเนินงาน โดยทั่วไป ไดเรกทอรีบนสุดของไซต์คือ "ROOT" และไดเรกทอรีอื่น ๆ จะเป็นรายการย่อย
ขั้นแรก เราได้รับไดเร็กทอรีระดับบนสุด (ไดเร็กทอรีราก) ของไซต์:
DirectoryEntry rootfolder = new DirectoryEntry("IIS://localhost/W3SVC/1/ROOT");
หากไม่มีข้อยกเว้นเกิดขึ้นเมื่อเราสร้างออบเจ็กต์นี้ นั่นหมายความว่า ว่าไดเร็กทอรีนี้มีอยู่จริง
มาเพิ่มไดเร็กทอรีเสมือนใหม่ ตัวอย่างเช่น เราต้องการเพิ่ม "Aspcn":
DirectoryEntry newVirDir = rootfolder.Children.Add("Aspcn", "IIsWebVirtualDir");
newVirDir.Invoid("AppCreate",จริง);
newVirDir.CommitChanges();
rootfolder.CommitChanges();
แนวคิดในการสร้างไดเร็กทอรีนั้นง่ายมาก นั่นคือเพิ่มเร็กคอร์ดอื่นให้กับชุดย่อยของไดเร็กทอรีราก (rootfolder.Children) วิธีการเพิ่มในคลาส DirectoryEntries ถูกใช้ที่นี่ โดยจะส่งคืน DirectoryEntry ซึ่งแสดงถึง ไดเร็กทอรีที่เพิ่มใหม่ พารามิเตอร์หนึ่งคือชื่อของไดเร็กทอรีเสมือน และตัวที่สองคือชื่อคลาสของ Schema เพื่อระบุประเภทของไดเร็กทอรีที่เราเพิ่ม จากนั้นใช้วิธี Invoke ของ DirectoryEntry เพื่อเรียกเมธอด "AppCreate" ใน ADSI เพื่อสร้างไดเร็กทอรีจริง ๆ (ดูเหมือนว่าจะสร้างไดเร็กทอรีได้สำเร็จโดยไม่ต้องทำตามขั้นตอนนี้ แต่เพื่อความปลอดภัย ทุกคนควรใช้มัน) และ ในที่สุดก็เรียกวิธีการใหม่ The CommitChanges ของไดเร็กทอรีรากยืนยันการดำเนินการนี้
เมื่อสร้างไดเร็กทอรีใหม่เราสามารถกำหนดค่าให้กับคุณลักษณะของไดเร็กทอรีนี้ได้ในเวลาเดียวกัน แต่ประสบการณ์จริงของฉันบอกฉันว่าไม่ควรทำเช่นนี้หากเรากำหนดค่าเมื่อสร้างไดเร็กทอรีใหม่ จะมีแอตทริบิวต์มากมายที่ไม่สามารถกำหนดได้สำเร็จ ตัวอย่างเช่น คุณลักษณะที่สำคัญแสดงถึงแอตทริบิวต์ The Path ของไดเร็กทอรี ดังนั้น Feidao ขอแนะนำให้คุณสร้างไดเร็กทอรีก่อน จากนั้นจึงกำหนดค่า ซึ่งก็คือ อัปเดตข้อมูลไดเร็กทอรี
อัปเดตไดเร็กทอรีเสมือน
ฉันเชื่อว่าทุกคนคุ้นเคยกับ IIS และเข้าใจการตั้งค่าที่สำคัญบางอย่างใน IIS เช่น สามารถอ่านได้ (AccessRead), เขียนได้ (AccessWrite), ปฏิบัติการได้ (AccessExecute) เป็นต้น สิ่งเหล่านี้สามารถทำได้โดยการกำหนดค่าให้กับคอลเลกชันคุณสมบัติ Properties ของ DirectoryEntry การกำหนดสามารถทำได้สองวิธี
วิธีแรกคือการเรียกใช้เมธอด Add ของคอลเลกชัน Properties เช่น:
dir.Properties["AccessRead"].Add(true)
วิธีที่สองคือการกำหนดค่าให้กับค่าดัชนีแรก :
dir. Properties["AccessRead"][0] = true
; มันขึ้นอยู่กับความชอบของคุณ
ก่อนที่จะกำหนดค่า เรายังจำเป็นต้องกำหนดเป้าหมายที่จะกำหนด :) ที่นี่เราใช้เมธอด Find ของคลาส DirectoryEntries เช่น:
DirectoryEntry
de = rootfolder.Children.Find("Aspcn", "IIsVirtualDir");
พบว่าเราพร้อมที่จะมอบหมายงานแล้ว อย่าลืมพิจารณาให้ดีเมื่อกำหนดค่า ค่าแอตทริบิวต์ในไดเร็กทอรีเสมือนอาจมีได้หลายค่า และคุณสามารถตรวจสอบได้หลายค่า - : (มีมากเกินไปและฉันจะไม่ทำซ้ำ คุณสามารถตรวจสอบได้บนเว็บไซต์ของ Microsoft :)
วิธี
ที่ใช้กันทั่วไปคือ: AccessRead, AccessWrite, AccessExecute, AccessScript, DefaultDoc, EnableDefaultDoc,
Path ไดเรกทอรีเสมือนนั้นง่ายมาก เพียงค้นหาไดเรกทอรีเสมือนที่คุณต้องการลบแล้วเรียกวิธี AppDelete
DirectoryEntry de = rootfolder.Children.Find("Aspcn","IIsVirtualDir");
de.Invoke("AppDelete",จริง);
rootfolder.CommitChanges();
อีกวิธีหนึ่งคือการเรียกวิธี Delete ของไดเร็กทอรี Root
วัตถุ [] paras = วัตถุใหม่ [2];
paras[0] = "IIsWebVirtualDir"; //ระบุว่าการดำเนินการเป็นไดเร็กทอรีเสมือน
ย่อหน้า[1] = "Aspcn";
rootfolder.Invoid("ลบ",ย่อหน้า);
rootfolder.CommitChanges();