WCF Message Inspector–wdrożenie (część II)

W poprzednim poście pokazałem jak stworzyć prosty Message Inspector, wyświetlający nagłówek lub wiadomość SOAP. Dzisiaj zajmiemy się podłączeniem zaimplementowanej klasy do usługi. Najładniejszym moim zdaniem rozwiązaniem jest implementacja behaviour’a, który następnie dołączy zaimplementowany message inspector. W przyszłości planuje napisać osobny post o behaviorach i ich zastosowaniu w WCF. Z punktu widzenia message inspector wystarczy wiedzieć, że behaviory służą do rozszerzania funkcjonalności np. endpoint’a.

Zaczynamy więc od implementacji behaviour’a dla endpoint’a:

public class CustomBehaviour : IEndpointBehavior
{
    public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
    {
    }

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
    {

    }

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
    {
        InspectorExample1 inspector = new InspectorExample1();
        endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);
    }

    public void Validate(ServiceEndpoint endpoint)
    {
    }
}

ApplyDispatchBehavior wykorzystywany jest dla zachowań usługi (nie klienta). W metodzie po prostu tworzymy inspector i dodajemy do kolekcji. Aby skonfigurować w web.config endpoint zgodnie z behaviorem musimy stworzyć jeszcze BehaviorExtensionElement:

public class CustomBehaviorExtensionElement : BehaviorExtensionElement
{
    protected override object CreateBehavior()
    {
        return new CustomBehaviour();
    }

    public override Type BehaviorType
    {
        get
        {
            return typeof(CustomBehaviour);
        }
    }
}

Jak widać wystarczy przeładować metodę i właściwość. Klasa jest niezbędna aby wykorzystać wcześniej zdefiniowane zachowanie w pliku web.config. Pozostało nam już tylko zmodyfikować odpowiednio plik konfiguracyjny:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

    <system.serviceModel>
        <services>
            <service name="WebApp.OrderService">
                <endpoint
                    behaviorConfiguration="WebAppBeaviour"
                    address="http://localhost:8000/OrderService"
                    binding="wsHttpBinding" bindingConfiguration="customWsHttpBinding"
                    contract="WebApp.OrderService.IOrderService" />
            </service>
        </services>

        <extensions>
            <behaviorExtensions>
                <add name="WebAppBeaviourElement" type="WebApp.Extensions.CustomBehaviorExtensionElement, WebApp.Extensions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
            </behaviorExtensions>
        </extensions>

        <behaviors>
            <endpointBehaviors>
                <behavior name="WebAppBeaviour">
                    <WebAppBeaviourElement />
                </behavior>
            </endpointBehaviors>
        </behaviors>

        <bindings>
            <wsHttpBinding>
                <binding name="customWsHttpBinding">
                    <security mode="None" />
                </binding>
            </wsHttpBinding>
        </bindings>

    </system.serviceModel>

</configuration> 

BehaviourExtension umożliwił wykorzystanie zachowania w pliku konfiguracyjnym. Bezpośrednio do behavior’a nie możemy odwoływać się w web.config.

One thought on “WCF Message Inspector–wdrożenie (część II)”

Leave a Reply

Your email address will not be published.