Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Этот раздел относится к технологии прежних версий, которая сохраняется для обеспечения обратной совместимости с существующими приложениями и не рекомендуется для разработки новых приложений. Сейчас распределенные приложения следует создавать с помощью Windows Communication Foundation (WCF).
Чтобы разместить удаленный объект в службах IIS, необходимо настроить удаленный объект. Обычно это делается с помощью файла конфигурации или программным образом в коде основного приложения. При размещении удаленного объекта в службах IIS можно либо поместить сведения о конфигурации файл Web.config, либо программным образом настроить удаленный объект в методе Application_Start в файле Global.asax.
Чтобы настроить удаленный объект с помощью файла конфигурации, выполните следующие действия:
поместите сведения о конфигурации в файл Web.config в выбранном виртуальном каталоге IIS;.
поместите реализацию удаленного типа в каталог \bin (или воспользуйтесь инструментом глобального кэша сборок (Gacutil.exe), чтобы разместить ее в глобальном кэше сборок).
При использовании файла Web.config не поддерживаются следующие функции:
задание имени приложения; роль имени приложения выполняет виртуальный каталог;
использование элемента <debug> в файле Web.config, используемом для настройки удаленного взаимодействия .NET;
использование каналов, отличных от HttpChannel;
использование файла Web.config и элемента <client> для автоматической настройки клиентского веб-приложения. Если требуется использовать службы IIS в качестве клиента удаленного взаимодействия, необходимо вызвать метод RemotingConfiguration.Configure в методе Application_Start в файле Global.asax.
Файл Web.config по-прежнему содержит базовые сведения о типе, которые должны иметься в системе, но некоторые объявления необходимо немного изменить, чтобы они соответствовали среде размещения. Например, можно задать пользовательские параметры для конкретного канала HttpChannel, но не следует задавать для него номер порта; если ASP.NET создаст еще один домен приложения для обработки нагрузки, из-за конфигурации удаленного взаимодействия этот новый домен приложения будет ожидать передачи данных через тот же порт, что приведет к появлению исключения. Например, файл Web.config для удаленного объекта .NET, размещенного в службах IIS, может выглядеть, как следующий пример кода. В данном случае нет необходимости включать строки конфигурации канала, если только не требуется задать свойства канала (в данном случае свойство priority
).
<configuration>
<system.runtime.remoting>
<application>
<service>
<wellknown
mode="Singleton"
type="ServiceClass, ServiceClassAssemblyName"
objectUri="ServiceClass.rem"
/>
</service>
<channels>
<channel
name="MyChannel"
priority="100"
ref="http"
/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
![]() |
---|
Не задавайте порт для указанных здесь каналов. Если приложение должно ожидать передачи данных через определенный порт, с помощью диспетчера интернет-служб настройте службы IIS, чтобы они ожидали передачи данных через этот порт. Настраиваемый канал автоматически используется дл обработки удаленных запросов, переданных через этот порт. |
Для успешного размещения в службах IIS объектов, активируемых сервером (<wellknown>), требуется универсальный код ресурса (URI), который заканчивается на rem или soap. Это требование не распространяется на другие домены основных приложений. Если для создания метаданных для активируемого сервером объекта, размещенного в службах IIS, используется средство Soapsuds (Soapsuds.exe), то URL-адрес передается в качестве аргумента программе Soapsuds.exe следующим образом:
http://< Computer >:< Port >/< VirtDir >/< ObjectURI >?wsdl
Для активируемых клиентом объектов, которые размещаются в службах IIS или в другом домене приложения, универсальный код ресурса (URI) не требуется ни в какой форме. URL-адрес передается в качестве аргумента программе Soapsuds.exe следующим образом:
http://< Computer >:< Port >/< VirtDir >/RemoteApplicationMetadata.rem?wsdl
Программная настройка в службах IIS осуществляется с помощью страницы Global.asax. В следующем примере демонстрируется конфигурация, показанная в предыдущем файле конфигурации, но реализованная с помощью файла Global.asax.
<%@ Application Language="VB" %>
<%@ Assembly Name="Server" %>
<%@ Import Namespace="System.Runtime.Remoting" %>
<%@ Import Namespace="System.Runtime.Remoting.Channels" %>
<%@ Import Namespace="System.Runtime.Remoting.Channels.Http" %>
<%@ Import Namespace="Server" %>
Sub Application_Start()
Dim props = New Hashtable() As IDictionary
props("name") = "MyChannel"
props("priority") = "100"
' Nothing entries specify the default formatters.
Dim channel As New HttpChannel( _
props, _
Nothing, _
Nothing _
)
ChannelServices.RegisterChannel(channel)
Dim WKSTE As New WellKnownServiceTypeEntry( _
GetType(ServiceClass), _
"HttpService", _
WellKnownObjectMode.SingleCall
)
RemotingConfiguration.RegisterWellKnownServiceType(WKSTE)
End Sub
<%@ Application Language="C#" %>
<%@ Assembly Name="Server" %>
<%@ Import Namespace="System.Runtime.Remoting" %>
<%@ Import Namespace="System.Runtime.Remoting.Channels" %>
<%@ Import Namespace="System.Runtime.Remoting.Channels.Http" %>
<%@ Import Namespace="Server" %>
void Application_Start(){
IDictionary props = new Hashtable();
props["name"] = "MyChannel";
props["priority"] = "100";
// Null entries specify the default formatters.
HttpChannel channel = new HttpChannel(
props,
null,
null
);
ChannelServices.RegisterChannel(channel);
WellKnownServiceTypeEntry WKSTE = new WellKnownServiceTypeEntry(
typeof(ServiceClass),
"HttpService",
WellKnownObjectMode.SingleCall
);
RemotingConfiguration.RegisterWellKnownServiceType(WKSTE);
}
В файл Web.config необходимо поместить следующие записи, чтобы убедиться, что имеются ссылки на все нужные сборки:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
</system.web>
</configuration>
Полный пример см. в разделе Пример удаленного взаимодействия. Размещение в службах IIS.
Использование SSL-сертификатов при удаленном взаимодействии .NET
Сертификаты позволяют идентифицировать конкретный компьютер, имя которого содержится в общем имени сертификата. Тем не менее очень легко изменить имя компьютера или использовать имя "localhost" в файлах конфигурации клиента, в результате чего возникнет расхождение между клиентом и общим именем в сертификате сервера. В .NET Framework версии 1.0 это расхождение игнорируется, а вызов реализуется на сервере.
Начиная с .NET Framework версии 1.1 это расхождение вызывает следующее исключение: "System.Net.WebException. Базовое соединение закрыто: не удалось установить доверительные отношения с удаленным сервером.". Если настроить удаленный клиент на использование общего имени сертификата не удается, можно переопределить расхождение, воспользовавшись следующими параметрами в файле конфигурации клиентского приложения:
<system.net>
<settings>
<servicePointManager
checkCertificateName="true"
/>
</settings>
</system.net>
Чтобы клиент программным образом игнорировал расхождение имен в сертификате, он должен создать экземпляр класса, реализующего интерфейс ICertificatePolicy и метод CheckValidationResult, который будет возвращать значение true, если значение certificateProblem равно 0x800c010f. После этого можно зарегистрировать объект в объекте System.Net.ServicePointManager, передав его в свойство ServicePointManager.CertificatePolicy. Следующий пример кода является соответствующей реализацией на языке Visual Basic:
Public Class MyPolicy Implements ICertificatePolicy
Public Function CheckValidationResult(srvPoint As ServicePoint, certificate As X509Certificate, request As WebRequest, certificateProblem As Integer) As Boolean
' Check for policy common name mismatch.
If certificateProblem = 0 Or certificateProblem = &H800b010f Then
Return True
Else
Return False
EndIf
End Function
End Class
public class MyPolicy : ICertificatePolicy {
public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) {
// Check for policy common name mismatch.
if (certificateProblem == 0 || certificateProblem == 0x800b010f)
return true;
else
return false;
}
}
Следующий код регистрирует экземпляр описанного выше класса в объекте System.Net ServicePointManager:
System.Net.ServicePointManager.CertificatePolicy = New MyPolicy()
System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
Проверка подлинности в удаленных приложениях, размещенных в службах IIS
В следующей таблице описаны параметры конфигурации, которые позволяют использовать некоторые функции проверки подлинности при удаленном взаимодействии .NET, если служба размещена в службах IIS.
Требуемый результат | Параметры конфигурации | Комментарии |
---|---|---|
Сервер проверяет подлинность клиента при каждом вызове, используя учетные данные клиента по умолчанию. |
На сервере в службах IIS выберите Встроенная проверка подлинности Windows и снимите флажок Анонимный доступ. На клиенте установите параметр useDefaultCredentials равным true. |
Это поведение по умолчанию в версии 1.0 платформы .NET, если параметр useDefaultCredentials имеет значение true. Это поведение поддерживается в версии 1.1 платформы .NET Framework, если параметр useAuthenticatedConnectionSharing также имеет значение false. |
Сервер проверяет подлинность клиента один раз, используя учетные данные клиента по умолчанию; последующие вызовы от данного клиента используют подключение, ранее прошедшее проверку подлинности. |
На сервере в службах IIS выберите Встроенная проверка подлинности Windows и снимите флажок Анонимный доступ. На клиенте установите параметр useDefaultCredentials равным true. |
Это поведение поддерживается только в платформе .NET Framework версии 1.1 и более поздних версий. |
Сервер проверяет подлинность клиента один раз, используя пользовательские или явным образом заданные учетные данные клиента; последующие вызовы от данного клиента используют подключение, ранее прошедшее проверку подлинности. |
На сервере в службах IIS выберите Встроенная проверка подлинности Windows и снимите флажок Анонимный доступ. На клиенте установите параметр credentials равным реализации ICredentials или задайте явные значения параметров username, password и domain. В обоих случаях необходимо также установить параметр unsafeAuthenticatedConnectionSharing равным true и задать значение connectionGroupName, которое соответствует только одному прошедшему проверку подлинности пользователю. |
Это поведение поддерживается только в платформе .NET Framework версии 1.1 и более поздних версий. |
См. также
Справочник
Схема параметров удаленного взаимодействия
Основные понятия
URL-адреса активации
Конфигурация удаленных приложений
Пример удаленного взаимодействия. Размещение в службах IIS