Поделиться через


Проверка безопасности

Этот образец показывает, как с помощью пользовательского поведения проверять службы на компьютере на соответствие определенным условиям. В этом образце службы проверяются с помощью пользовательского поведения путем сканирования каждой конечной точки службы и проверки, содержат ли они безопасные элементы привязки. Этот образец основан на примере Образец для начала работы.

Aa395204.note(ru-ru,VS.100).gifПримечание
Процедура установки и инструкции по построению для данного образца приведены в конце этого раздела.

Пользовательское поведение проверки конечной точки

Добавив код пользователя в метод 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>
...

После того как расширение поведения добавлено в службу, можно добавить поведение endpointValidate в список поведений в файле Web.config и, таким образом, в службу.

    <behaviors>
        <serviceBehaviors>
            <behavior name="CalcServiceSEB1">
                <serviceMetadata httpGetEnabled="true" />
                <endpointValidate />
            </behavior>
        </serviceBehaviors>
    </behaviors>

Поведения и их расширения, добавленные в файл Web.config, применяют поведение к отдельным службам, а при добавлении в файл Machine.config поведение применяется ко всем службам, работающим на компьютере.

Aa395204.note(ru-ru,VS.100).gifПримечание
При добавлении поведения во все службы предлагается перед внесением каких-либо изменений в файл Machine.config создать резервную копию этого файла.

Теперь запустите клиент, содержащийся в каталоге client\bin данного образца. Происходит исключение со следующим сообщением: "Не удается активировать запрошенную службу "https://localhost/servicemodelsamples/service.svc"". Это ожидаемая ситуация, так как поведение проверки конечной точки считает конечную точку небезопасной и запрещает запуск службы. Поведение также создает внутреннее исключение, которое описывает, какая конечная точка является небезопасной, и записывает сообщение в системную программу Просмотр событий, в раздел источника "System.ServiceModel 4.0.0.0", категория "WebHost". В данном образце можно также включить трассировку в службе. Это позволит конечному пользователю просматривать исключения, созданные поведением проверки конечных точек, открыв трассировки службы с помощью программы Service Trace Viewer.

Просмотр сообщений исключения сбоя проверки конечной точки в программе Просмотр событий

  1. В меню Пуск выберите пункт Выполнить….

  2. Введите eventvwr и нажмите кнопку ОК.

  3. В окне программы Просмотр событий выберите Приложение.

  4. Дважды щелкните мышью недавно добавленное событие "System.ServiceModel 4.0.0.0" в категории "WebHost" в окне Приложение, чтобы просмотреть сообщения о небезопасных конечных точках.

Настройка, построение и выполнение образца

  1. Убедитесь, что выполнены процедуры, описанные в разделе Процедура однократной настройки образцов Windows Communication Foundation.

  2. Чтобы создать выпуск решения на языке C# или Visual Basic .NET, следуйте инструкциям в разделе Построение образцов Windows Communication Foundation.

  3. Чтобы выполнить образец на одном или нескольких компьютерах, следуйте инструкциям в разделе Running the Windows Communication Foundation Samples.

Aa395204.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WCF\Basic\Management\ServiceValidation

См. также

Другие ресурсы

Образцы наблюдения за AppFabric