Проверка безопасности
В примере ServiceValidation показано, как использовать настраиваемое поведение для проверки служб на компьютере, чтобы убедиться, что они соответствуют определенным критериям. В этом образце службы проверяются с помощью пользовательского поведения путем сканирования каждой конечной точки службы и проверки, содержат ли они безопасные элементы привязки. Этот пример основан на начале работы.
Примечание.
Процедура настройки и инструкции по построению для данного образца приведены в конце этого раздела.
Пользовательское поведение проверки конечной точки
Добавив код пользователя в метод Validate
, содержащийся в интерфейсе IServiceBehavior, для службы или конечной точки можно создать пользовательское поведение, позволяющее выполнять определенные пользователем действия. Следующий код служит для перебора в цикле всех конечных точек, содержащихся в службе, и поиска безопасных привязок в коллекциях привязок конечных точек.
public void Validate(ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase)
{
// Loop through each endpoint individually, gathering their
// binding elements.
foreach (ServiceEndpoint endpoint in serviceDescription.Endpoints)
{
secureElementFound = false;
// Retrieve the endpoint's binding element collection.
BindingElementCollection bindingElements =
endpoint.Binding.CreateBindingElements();
// Look to see if the binding elements collection contains any
// secure binding elements. Transport, Asymmetric, and Symmetric
// binding elements are all derived from SecurityBindingElement.
if ((bindingElements.Find<SecurityBindingElement>() != null) || (bindingElements.Find<HttpsTransportBindingElement>() != null) || (bindingElements.Find<WindowsStreamSecurityBindingElement>() != null) || (bindingElements.Find<SslStreamSecurityBindingElement>() != null))
{
secureElementFound = true;
}
// Send a message to the system event viewer when an endpoint is deemed insecure.
if (!secureElementFound)
throw new Exception(System.DateTime.Now.ToString() + ": The endpoint \"" + endpoint.Name + "\" has no secure bindings.");
}
}
При добавлении приведенного ниже кода в файл Web.config добавляется расширение поведения serviceValidate
для распознавания службой.
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="endpointValidate" type="Microsoft.ServiceModel.Samples.EndpointValidateElement, endpointValidate, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
...
</system.serviceModel>
После того как расширение поведения добавлено в службу, можно добавить поведение endpointValidate
в список поведений в файле Web.config и, таким образом, в службу.
<behaviors>
<serviceBehaviors>
<behavior name="CalcServiceSEB1">
<serviceMetadata httpGetEnabled="true" />
<endpointValidate />
</behavior>
</serviceBehaviors>
</behaviors>
Поведения и их расширения, добавленные в файл Web.config, применяют поведение к отдельным службам, а при добавлении в файл Machine.config поведение применяется ко всем службам, работающим на компьютере.
Примечание.
При добавлении поведения во все службы предлагается перед внесением каких-либо изменений в файл Machine.config создать резервную копию этого файла.
Теперь запустите клиент, содержащийся в каталоге client\bin данного образца. Исключение возникает со следующим сообщением: "Не удалось активировать запрошенную службу http://localhost/servicemodelsamples/service.svc
". Ожидается, что конечная точка считается небезопасной для конечной точки, проверяющей поведение, и предотвращает запуск службы. Поведение также создает внутреннее исключение, которое описывает, какая конечная точка является небезопасной, и записывает сообщение в системную программу Просмотр событий, в раздел источника "System.ServiceModel 4.0.0.0", категория "WebHost". В данном образце можно также включить трассировку в службе. Это позволит конечному пользователю просматривать исключения, созданные поведением проверки конечных точек, открыв трассировки службы с помощью программы Service Trace Viewer.
Просмотр сообщений об исключении проверки неудачной конечной точки в Просмотр событий
Щелкните меню "Пуск" и выберите "Выполнить".
Введите
eventvwr
и нажмите кнопку ОК.В окне Просмотр событий щелкните "Приложение".
Дважды щелкните недавно добавленное событие System.ServiceModel 4.0.0.0.0 в окне приложения для просмотра небезопасных сообщений конечной точки.
Настройка, сборка и запуск примера
Убедитесь, что вы выполнили процедуру однократной установки для примеров Windows Communication Foundation.
Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Building the Windows Communication Foundation Samples.
Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в разделе "Примеры Windows Communication Foundation".