Spis treści:

Kategoria:C#Windows Communication Foundation


Definiowanie parametrów transmisji danych w WCF

Mogliśmy się już przekonać, że istnieje kilka różnych protokołów, które pozwalają nam na transmisję danych w WCF. Przypomnijmy, że są to między innymi HTTP (basicHttpBinding, wsHttpBinding) oraz TCP (netTcpBinding). Definiując sposób komunikacji wybieraliśmy spośród kilku predefiniowanych typów wiązania, powiedzmy basicHttpBinding. Każde z takich predefiniowanych wiązań ma szereg parametrów, które mogą mieć wpływ na zachowanie się usług WCF. Nie zawsze domyślne ustawienia są dla nas właściwe. Każde z tych ustawień może oczywiście zostać zmienione.

Co możemy modyfikować

Istnieje wiele parametrów, które mogłyby nas zainteresować. Są to między innymi parametry związane ze sposobem zabezpieczeń transmisji, maksymalne rozmiary komunikatów, czasy po których serwer automatycznie odrzuci żadanie, jeżeli nie uzyska odpowiedzi. Możemy wskazać, czy klient będzie obsługiwał ciasteczka, określić, czy wymiana danych będzie się odbywała za pośrednictwem serwera proxy. Jawnie możemy też wskazać, jaki obszar pamięci operacyjnej przydzielony będzie na menadżera bufora podręcznego, zarządzającego komunikatami. Ilość konfigurowalnych parametrów może się wydać przerażająca. Dobra wiadomość jest taka, że nie trzeba wszystkiego konfigurować. Nadpisać można tylko niektóre atrybuty, a całą resztę pozostawić bez zmian.

Jak skonfigurować wiązanie

Własne wiązanie definiuje się w pliku konfiguracyjnem serwera w sekcji system.serviceModel. Zanim wyjaśnię szczegóły, przyjrzyjmy się przykładowemu plikowi konfiguracyjnemu z definicją własnego wiązania:

<?xml version="1.0encoding="utf-8?>
<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding allowCookies="false"
                 bypassProxyOnLocal="false"
                 closeTimeout="00:01:00"
                 hostNameComparisonMode="StrongWildcard"
                 maxBufferPoolSize="524288"
                 maxBufferSize="65536"
                 maxReceivedMessageSize="65536"
                 messageEncoding="Text"
                 name="MyHttpBinding"
                 openTimeout="00:01:00"
                 proxyAddress="null"
                 receiveTimeout="00:10:00"
                 sendTimeout="00:01:00"
                 textEncoding="utf-8"
                 transferMode="Buffered"
                 useDefaultWebProxy="true">
          <security mode="None"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="HelloWorld">
        <endpoint address="http://localhost:2222/Hello"
                  binding="basicHttpBinding"
                  bindingConfiguration="MyHttpBinding"
                  contract="IHelloWorld"/>
      </service>
    </services>
  </system.serviceModel>
</configuration>

Zapamiętać należy kilka rzeczy. Po pierwsze, definicja znajduje się w sekcji system.serviceModel/bindings/konfiguracjaBazowa, gdzie konfiguracjaBazowa to nasz podstawowy tyb wiązania. Inaczej mówiąc, jest to typ, który będzie przez nas modyfikowany. W tym przypadku jest to basicHttpBinding. Naszą konfigurają jest element XML o nazwie binding, który zawiera wszystko to, co nas interesuje. Spośród wielu różnych atrybutów warto zwrócić szczególną uwagę na atrybut name, który określa nazwę naszej nowej konfiguracji wiązania. To właśnie tej nazwy użyjemy w definicji końcówki. To jest właśnie drugi kluczowy element. W elemencie endpoint pojawił sie nieobecny dotąd atrybut bindingConfiguration. Zawiera on wprowadzoną przez nas nazwę konfiguracji.

W przedstawionej konfiguracji MyHttpBinding użyto domyślnych wartości, więc umieszczanie takowej nie ma sensu. Definicja może stanowić pewnego rodzaju wzorzec, który będzie modyfikowany w zależności od potrzeb.

Czy to wszystko?

To oczywiście nie jest wszystko, co można konfigurować. W elemencie binding może znaleźć się inny istotny element, a mianowicie security. W naszym przypadku jest on wyłączony. Umożliwia on jednak konfigurację zabezpieczeń. Przedstawione wartości domyślne dotyczą tylko wiązania basicHttpBinding. Wartości domyślne w pozostałych wiązaniach mogą się znacząco różnić.

Kategoria:C#Windows Communication Foundation

, 2013-12-20

Brak komentarzy - bądź pierwszy

Dodaj komentarz
Wyślij
Ostatnie komentarze
puściłem benta i leci klockiem w pomieszczeniu, w którym kodujemy
Dzieki za rozjasnienie zagadnienia upsert. wlasnie sie ucze programowania :).