Aracılığıyla paylaş


Güvenlik doğrulaması

ServiceValidation örneği, belirli ölçütleri karşıladığından emin olmak için bilgisayardaki hizmetleri doğrulamak için özel bir davranışın nasıl kullanılacağını gösterir. Bu örnekte hizmetler, hizmetteki her uç noktayı tarayarak ve bunların güvenli bağlama öğeleri içerip içermediğini denetleyerek özel davranış tarafından doğrulanır. Bu örnek, "Başlarken" üzerine kurulmuştur.

Uyarı

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

Uç Nokta Doğrulama Özel Davranışı

Arabirimde Validate yer alan yönteme IServiceBehavior kullanıcı kodu eklenerek, kullanıcı tanımlı eylemleri gerçekleştirmek için bir hizmete veya uç noktaya özel davranış verilebilir. Aşağıdaki kod, bir hizmette yer alan ve bağlama koleksiyonlarında güvenli bağlamalar için arama yapan her uç nokta arasında döngü yapmak için kullanılır.

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 dosyasına aşağıdaki kodun eklenmesi, hizmetin tanıması için serviceValidate davranış uzantısını ekler.

<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>

Davranış uzantısı hizmete eklendikten sonra, artık davranışı Web.config dosyasındaki davranış listesine ve dolayısıyla hizmete eklemek endpointValidate mümkündür.

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

Web.config dosyasına eklenen davranışlar ve uzantıları tek tek hizmetlere davranış uygularken, Machine.config dosyasına eklendiğinde bilgisayarda etkin olan her hizmete davranış uygulanır.

Uyarı

Tüm hizmetlere davranış eklerken, herhangi bir değişiklik yapmadan önce Machine.config dosyasını yedeklemek önerilir.

Şimdi bu örneğin client\bin dizininde sağlanan istemciyi çalıştırın. Aşağıdaki mesajla bir istisna oluşur: "İstenen hizmet http://localhost/servicemodelsamples/service.svc etkinleştirilemedi." Bu beklenen bir durumdur, çünkü uç nokta doğrulama davranışı tarafından uç noktanın güvensiz olduğu kabul edilir ve bu, hizmetin başlatılmasını engeller. Davranış ayrıca hangi uç noktanın güvenli olmadığını açıklayan bir iç özel durum oluşturur ve sistem Olay Görüntüleyicisi'ne "System.ServiceModel 4.0.0.0" kaynağı ve "WebHost" kategorisi altında bir ileti yazar. Bu örnekte hizmette izlemeyi açmak da mümkündür. Bu, kullanıcıya uç nokta doğrulama işlemi tarafından oluşturulan özel durumları, sonuçta elde edilen hizmet izlerini Hizmet İzleme Görüntüleyici aracını kullanarak açıp görüntüleme olanağı tanır.

Olay Görüntüleyicisi'nde başarısız uç nokta doğrulama özel durum iletilerini görüntüleme

  1. Başlat menüsüne tıklayın ve Çalıştır'ı seçin.

  2. Yazın eventvwr ve Tamam'a tıklayın.

  3. Olay Görüntüleyicisi penceresinde Uygulama'ya tıklayın.

  4. Güvenli olmayan uç nokta iletilerini görüntülemek için Uygulama penceresindeki "WebHost" kategorisi altında son eklenen "System.ServiceModel 4.0.0.0" olayına çift tıklayın.

Örneği ayarlama, derleme ve çalıştırma

  1. Windows Communication Foundation Örnekleri içinOne-Time Kurulum Yordamını yaptığınızdan emin olun.

  2. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örneklerioluşturma başlığındaki yönergeleri izleyin.

  3. Örneği tek bir makine veya makineler arası bir yapılandırmada çalıştırmak için, Windows Communication Foundation örneklerini çalıştırmayönergelerini izleyin.

Ayrıca bakınız