共用方式為


站 < 台 virtualDirectoryDefaults 的虛擬目錄預設值>

概觀

元素 <virtualDirectoryDefaults><site> 元素會指定父月臺中所有虛擬目錄的預設設定。 當父網站中所有虛擬目錄沒有明確定義的屬性時,元素 <virtualDirectoryDefaults> 很適合用來定義通用屬性。

注意

如果區段和 <virtualDirectory> 區段中都設定 <virtualDirectoryDefaults> 了特定虛擬目錄的相同屬性或子專案,則區段中的 <virtualDirectory> 組態會用於該虛擬目錄。

相容性

版本 備註
IIS 10.0 <virtualDirectoryDefaults> IIS 10.0 中未修改專案。
IIS 8.5 <virtualDirectoryDefaults> 在 IIS 8.5 中修改專案。
IIS 8.0 在 IIS 8.0 中未修改專案 <virtualDirectoryDefaults>
IIS 7.5 <virtualDirectoryDefaults> 在 IIS 7.5 中修改專案。
IIS 7.0 元素 <virtualDirectoryDefaults><site> 元素是在 IIS 7.0 中引進。
IIS 6.0 N/A

安裝程式

元素 <virtualDirectoryDefaults><site> 元素包含在 IIS 7 的預設安裝中。

作法

如何設定月臺的預設虛擬目錄認證

  1. (IIS) 管理員開啟 Internet Information Services

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [ 系統管理工具],然後按兩下 [Internet Information Services] ([IIS) 管理員]。
  2. 在 [ 連線 ] 窗格中,展開伺服器名稱、展開 [月臺] 節點,然後按一下月臺的名稱。

  3. 在網站的 [首頁]窗格中,按一下 [動作] 窗格中的 [檢視應用程式]。
    顯示 [預設網站首頁] 窗格的螢幕擷取畫面。

  4. 在網站的 [應用程式] 窗格中,按一下 [動作] 窗格中的 [設定應用程式預設值...]。
    顯示 [應用程式] 窗格的螢幕擷取畫面。[動作] 窗格中的 [新增應用程式] 為高光。

  5. 在 [ 應用程式預設值] 對話方塊中,指定月臺的預設虛擬目錄認證,然後按一下 [ 確定]。
    顯示 [應用程式預設值] 對話方塊的螢幕擷取畫面。

組態

屬性

屬性 描述
allowSubDirConfig 選擇性的 Boolean 屬性。

指定 IIS 是否會在目錄階層中低於目前層級的內容目錄中尋找Web.config檔案, (true) ,或不會在低於目前層級的內容目錄中尋找Web.config檔案, (false) 。

預設值是 true
logonMethod 選擇性列舉屬性。

指定父網站中應用程式內所有虛擬目錄的預設登入方法。

logonMethod屬性可以是下列其中一個可能的值。 預設值為 ClearText
描述
Batch 此登入類型適用于批次伺服器,其中進程可能會代表使用者執行,而不需要該使用者的直接介入。

數值為 1

ClearText 此登入類型會保留驗證套件中的名稱和密碼,這可讓伺服器在模擬用戶端時連線到其他網路伺服器。

數值為 3

Interactive 此登入類型適用于以互動方式使用電腦的使用者。

數值為 0

Network 此登入類型適用于驗證純文字密碼的高效能伺服器。 此登入類型不會快取認證。

數值為 2

如需這些值的詳細資訊,請參閱 LogonUser
.
password 選擇性字串屬性。

指定與使用者名稱相關聯的密碼。

注意: 若要避免在組態檔中儲存未加密的密碼字串,請一律使用 AppCmd.exe 或 IIS 管理員來輸入密碼。 如果您使用這些管理工具,密碼字串將會在寫入 XML 組態檔之前自動加密。 這提供比儲存未加密密碼更好的密碼安全性。
path 選擇性字串屬性。

指定父網站中應用程式內所有虛擬目錄的預設虛擬路徑。
physicalPath 選擇性字串屬性。

指定父網站中應用程式內所有虛擬目錄的預設實體路徑。
userName 選擇性字串屬性。

指定帳戶的預設使用者名稱,可存取父月臺中應用程式內所有虛擬目錄的組態檔和內容。

子元素

無。

組態範例

下列組態範例會指定預設網站中虛擬目錄的預設登入方法。

<sites>
   <site name="Default Web Site" id="1">
      <application path="/">
         <virtualDirectory path="/" physicalPath="C:\Inetpub\wwwroot" />
      </application>
      <bindings>
         <binding protocol="http" bindingInformation="*:80:" />
      </bindings>
      <virtualDirectoryDefaults logonMethod="Network" />
   </site>
</sites>

範例程式碼

下列程式碼範例會指定預設網站中虛擬目錄的預設登入方法。

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].virtualDirectoryDefaults.logonMethod:Network" /commit:apphost

注意

當您使用AppCmd.exe設定這些設定時,請務必將 認可 參數 apphost 設定為 。 這會將組態設定認可至ApplicationHost.config檔案中適當的位置區段。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");
         ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();

         ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");
         if (siteElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement virtualDirectoryDefaultsElement = siteElement.GetChildElement("virtualDirectoryDefaults");
         virtualDirectoryDefaultsElement["logonMethod"] = @"Network";

         serverManager.CommitChanges();
      }
   }

   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")
      Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection

      Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Default Web Site")
      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim virtualDirectoryDefaultsElement As ConfigurationElement = siteElement.GetChildElement("virtualDirectoryDefaults")
      virtualDirectoryDefaultsElement("logonMethod") = "Network"

      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");
var sitesCollection = sitesSection.Collection;

var siteElementPos = FindElement(sitesCollection, "site", ["name", "Default Web Site"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);

var virtualDirectoryDefaultsElement = siteElement.ChildElements.Item("virtualDirectoryDefaults");
virtualDirectoryDefaultsElement.Properties.Item("logonMethod").Value = "Network";

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection

siteElementPos = FindElement(sitesCollection, "site", Array("name", "Default Web Site"))
If (siteElementPos = -1) Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)

Set virtualDirectoryDefaultsElement = siteElement.ChildElements.Item("virtualDirectoryDefaults")
virtualDirectoryDefaultsElement.Properties.Item("logonMethod").Value = "Network"

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function