Привязки привязок <>
Общие сведения
Элемент <bindings>
настраивает сведения о привязке для веб-сайта IIS 7 или более поздней версии. Он также может определить привязки по умолчанию для всех сайтов на веб-сервере, если он включен в <siteDefaults>
элемент .
Этот элемент может содержать коллекцию <binding>
элементов. Каждый элемент в коллекции определяет отдельный набор сведений о привязке, которые запрос может использовать для связи с веб-сайтом. Например, если сайт требует, чтобы пользователи связылись с ним по протоколу HTTP и HTTPS, необходимо определить привязку для каждого протокола.
Вы также можете использовать <clear />
элемент в элементе , <bindings>
чтобы переопределить значения по умолчанию привязки, унаследованные от элемента уровня <siteDefaults>
сервера.
Совместимость
Версия | Примечания |
---|---|
IIS 10.0 | Элемент <bindings> не был изменен в IIS 10.0. |
IIS 8,5 | Элемент <bindings> не был изменен в IIS 8.5. |
IIS 8,0 | Элемент <bindings> не был изменен в IIS 8.0. |
IIS 7,5 | Элемент <bindings> не был изменен в IIS 7.5. |
IIS 7.0 | Элемент <bindings> появился в IIS 7.0. |
IIS 6,0 | Коллекция <bindings> заменяет разделы свойства ServerBindings в объекте метабазы IIsWebServer IIS 6.0. |
Настройка
Элемент <bindings>
включен в установку iis 7 или более поздней версии по умолчанию.
Инструкции
Добавление сведений о привязке на сайт
Откройте диспетчер служб IIS:
Если вы используете Windows Server 2012 или Windows Server 2012 R2:
- На панели задач щелкните диспетчер сервера, выберите Сервис, а затем диспетчер служб IIS.
Если вы используете Windows 8 или Windows 8.1:
- Удерживая нажатой клавишу Windows, нажмите букву X и щелкните панель управления.
- Щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
Если вы используете Windows Server 2008 или Windows Server 2008 R2:
- На панели задач нажмите кнопку Пуск, наведите указатель на пункт Администрирование, а затем выберите Пункт Диспетчер служб IIS.
Если вы используете Windows Vista или Windows 7:
- На панели задач нажмите кнопку Пуск, а затем панель управления.
- Дважды щелкните Администрирование, а затем дважды щелкните Диспетчер служб IIS.
В области Подключения разверните имя сервера, узел Сайты, а затем щелкните веб-сайт, на котором требуется настроить привязки.
В области Действия щелкните Привязки...
В диалоговом окне Привязки сайтов нажмите кнопку Добавить...
В диалоговом окне Добавление привязки сайта добавьте сведения о привязке и нажмите кнопку ОК.
Конфигурация
Вы можете добавить <bindings>
элемент для каждого сайта в файл ApplicationHost.config, который может содержать коллекцию отдельных <binding>
элементов, определяющих отдельные привязки протокола для сайта. Для просмотра в Интернете каждому сайту потребуется по крайней мере одна привязка HTTP или HTTPS.
Вы также можете использовать <clear />
элемент в элементе , <bindings>
чтобы переопределить значения по умолчанию привязки, унаследованные от элемента уровня <siteDefaults>
сервера.
Атрибуты
Отсутствует.
Дочерние элементы
Элемент | Описание |
---|---|
binding |
Необязательный элемент. Настраивает привязку на родительском сайте. |
clear |
Необязательный элемент. Очищает ссылки на параметры по умолчанию, унаследованные от родительского уровня конфигурации. |
Образец конфигурации
В следующем примере определяется сайт Contoso с двумя привязками. Первая привязка предназначена для имени узла "www.contoso.com" на порте 80 для IP-адреса 192.168.0.1, а вторая — для привязки HTTPS для всех IP-адресов через порт 443.
<site name="Contoso" id="2">
<application path="/" applicationPool="Contoso">
<virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="192.168.0.1:80:www.contoso.com" />
<binding protocol="https" bindingInformation="*:443:" />
</bindings>
</site>
Пример кода
В следующих примерах настраивается сайт Contoso с именем узла "www.contoso.com" на порту 80 для IP-адреса 192.168.0.1 и привязкой HTTPS для всех IP-адресов через порт 443.
AppCmd.exe
appcmd.exe set site /site.name:Contoso /+bindings.[protocol='http',bindingInformation='192.168.0.1:80:www.contoso.com']
appcmd.exe set site /site.name:Contoso /+bindings.[protocol='https',bindingInformation='*:443:']
Или можно использовать:
appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].bindings.[protocol='http',bindingInformation='192.168.0.1:80:www.contoso.com']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/sites /+"[name='Contoso'].bindings.[protocol='https',bindingInformation='*:443:']" /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", @"Contoso");
if (siteElement == null) throw new InvalidOperationException("Element not found!");
ConfigurationElementCollection bindingsCollection = siteElement.GetCollection("bindings");
ConfigurationElement bindingElement = bindingsCollection.CreateElement("binding");
bindingElement["protocol"] = @"http";
bindingElement["bindingInformation"] = @"192.168.0.1:80:www.contoso.com";
bindingsCollection.Add(bindingElement);
ConfigurationElement bindingElement1 = bindingsCollection.CreateElement("binding");
bindingElement1["protocol"] = @"https";
bindingElement1["bindingInformation"] = @"*:443:";
bindingsCollection.Add(bindingElement1);
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", "Contoso")
If (siteElement Is Nothing) Then
Throw New InvalidOperationException("Element not found!")
End If
Dim bindingsCollection As ConfigurationElementCollection = siteElement.GetCollection("bindings")
Dim bindingElement As ConfigurationElement = bindingsCollection.CreateElement("binding")
bindingElement("protocol") = "http"
bindingElement("bindingInformation") = "192.168.0.1:80:www.contoso.com"
bindingsCollection.Add(bindingElement)
Dim bindingElement1 As ConfigurationElement = bindingsCollection.CreateElement("binding")
bindingElement1("protocol") = "https"
bindingElement1("bindingInformation") = "*:443:"
bindingsCollection.Add(bindingElement1)
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", "Contoso"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);
var bindingsCollection = siteElement.ChildElements.Item("bindings").Collection;
var bindingElement = bindingsCollection.CreateNewElement("binding");
bindingElement.Properties.Item("protocol").Value = "http";
bindingElement.Properties.Item("bindingInformation").Value = "192.168.0.1:80:www.contoso.com";
bindingsCollection.AddElement(bindingElement);
var bindingElement1 = bindingsCollection.CreateNewElement("binding");
bindingElement1.Properties.Item("protocol").Value = "https";
bindingElement1.Properties.Item("bindingInformation").Value = "*:443:";
bindingsCollection.AddElement(bindingElement1);
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 = 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", "Contoso"))
If siteElementPos = -1 Then
WScript.Echo "Element not found!"
WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)
Set bindingsCollection = siteElement.ChildElements.Item("bindings").Collection
Set bindingElement = bindingsCollection.CreateNewElement("binding")
bindingElement.Properties.Item("protocol").Value = "http"
bindingElement.Properties.Item("bindingInformation").Value = "192.168.0.1:80:www.contoso.com"
bindingsCollection.AddElement(bindingElement)
Set bindingElement1 = bindingsCollection.CreateNewElement("binding")
bindingElement1.Properties.Item("protocol").Value = "https"
bindingElement1.Properties.Item("bindingInformation").Value = "*:443:"
bindingsCollection.AddElement(bindingElement1)
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