WCF - Servicebindung

Die WCF-Dienstbindung besteht aus mehreren Elementen, in denen jedes Element die Art und Weise definiert, wie der Dienst mit dem Client kommuniziert. Ein Transportelement und ein Nachrichtenkodierungselement sind die beiden wichtigsten Komponenten jeder Bindung. In diesem Kapitel werden verschiedene häufig verwendete WCF-Dienstbindungen erläutert.

Grundbindung

Die Basisbindung wird von der BasicHttpBinding-Klasse angeboten. Es verwendet das HTTP-Protokoll, um einen WCF-Dienst als ASP.NET-Webdienst (ASMX-Webdienst) zu transportieren und darzustellen, sodass alte Clients, die ASMX-Webdienste verwenden, die neuen Dienste bequem nutzen können.

Die Basisbindung wird als Standardbindung in einem von Silverlight aktivierten WCF-Webdienst festgelegt und ist eine Standardbindung für die Kommunikation im Webdienststil. Es unterstützt kein zuverlässiges Messaging.

Im Folgenden finden Sie ein Code-Snippet mit den Standardeinstellungen für die Basisbindung.

<basicHttpBinding>
   <binding name = "basicHttpBindingDefaults" allowCookies = "false" 
      bypassProxyOnLocal = "false" hostNameComparisonMode = "StrongWildcard" 
      maxBufferPoolSize = "524288" maxBufferSize = "65536" 
      maxReceivedMessageSize = "65536" messageEncoding = "Text" proxyAddress = "" 
      textEncoding = "utf-8" transferMode = "Buffer" useDefaultWebProxy = "true" 
      closeTimeout = "00:01:00" openTimeout = "00:01:00" receiveTimeout = "00:10:00" 
      sendTimeout = "00:01:00">
   
      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" 
         maxDepth = "32"
         maxNameTableCharCount = "16384" maxStringContentLength = "8192"/>

      <security mode = "None">
         <transport clientCredentialType = "None" proxyCredentialType = "None" realm = ""/>
         <message algorithmSuite = "Basic256" clientCredentialType = "UserName" />
      </security>       
   </binding>

</basicHttpBinding>

Die oben genannten Standardeinstellungen haben ihre offensichtlichen Einschränkungen, da die Nachrichtengröße begrenzt ist und es keinen Sicherheitsmodus gibt. Die Anpassung der Basisbindung löst dieses Problem jedoch wie das folgende.

<basicHttpBinding>
   <binding name = "basicHttpSecure" maxBufferSize = "100000" maxReceivedMessageSize = "100000">
   
      <readerQuotas maxArrayLength = "100000" maxStringContentLength = "100000"/>
      <security mode = "TransportWithMessageCredential" />
     
   </binding>
</basicHttpBinding>

Webdienstbindung

Die WS-Bindung (Web Service) wird von der WSHttpBinding-Klasse bereitgestellt. Es ist der Basisbindung ziemlich ähnlich und verwendet dieselben Protokolle für den Transport, bietet jedoch mehrere WS- * -Spezifikationen wie WS-zuverlässiges Messaging, WS-Transaktionen, WS-Sicherheit und viele mehr. Kurz gesagt, WSHttpBinding entspricht der Summe der grundlegenden HttpBinding- und WS– * -Spezifikationen. Im Folgenden finden Sie ein Code-Snippet mit den Standardeinstellungen für die WS-Bindung.

<wsHttpBinding>
   <binding name = "wsHttpBindingDefaults" allowCookies = "false" 
      bypassProxyOnLocal = "false" closeTimeout = "00:01:00" 
      hostNameComparisonMode = "StrongWildcard" 
      maxBufferPoolSize = "524288" maxReceivedMessageSize = "65536" 
      messageEncoding = "Text" openTimeout = "00:01:00" 
      receiveTimeout = "00:10:00" proxyAddress = "" sendTimeout = "00:01:00" 
      textEncoding = "utf-8" transactionFlow = "false" 
      useDefaultWebProxy = "true" > 
   
      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = ."4096" 
         maxDepth = "32" maxNameTableCharCount = "16384" 
         maxStringContentLength = "8192"/>

      <reliableSession enabled = "false" ordered = "true" 
         inactivityTimeout = "oo:10:00" /> 

      <security mode = "Message">
         <message algorithmSuite = "Basic256" clientCredentialType = "Windows" 
            esatalishSecurityContext = "true" 
            negotiateServiceCredential = "true" />

         <transport clientCredentialType = "Windows"
            proxyCredentialType = "None" realm = ""/>        	
      </security>
      
   </binding>
</wsHttpBinding>

IPC-Bindung

Die IPC-Bindung verwendet Named Pipe und wird von der Klasse netNamedPipeBinding angeboten. Dies ist die schnellste und sicherste Bindung unter allen verfügbaren Bindungen. Obwohl die Sicherheit auf Nachrichtenebene hier nicht unterstützt wird, sind Nachrichten aufgrund einer robusten Transportsicherheit standardmäßig sicher. Im Folgenden finden Sie das Code-Snippet mit den Standardeinstellungen für die IPC-Bindung.

<netNamedPipeBinding>
   
   <binding name = "netPipeDefaults" closeTimeout = "00:01:00" 
      hostNameComparisonMode = "StrongWildcard" maxBufferPoolSize = "524288" 
      maxBufferSize = "65536" maxConnections = "10" 
      maxReceivedMessageSize = "65536" openTimeout = "00:01:00" 
      receiveTimeout = "00:10:00" sendTimeout = "00:01:00" transactionFlow = "false" 
      transactionProtocol = "OleTransactions" transferMode = "Buffered">  

      <readerQuotas maxArrayLength = "16384" maxBytesPerRead = "4096" 
         maxDepth = "32" maxNameTableCharCount = "16384" 
         maxStringContentLength = "8192"/>
   
      <security mode = "Transport">        	
      </security>
      
   </binding>
</netNamedPipeBinding>

Andere Arten von Servicebindungen

  • TCP Binding- Diese von der NetTCPBinding-Klasse bereitgestellte Bindung verwendet das TCP-Protokoll für die Kommunikation innerhalb desselben Netzwerks und führt die Nachrichtenkodierung im Binärformat durch. Diese Bindung gilt im Gegensatz zu anderen als die zuverlässigste.

  • WS Dual Binding- Diese Art der Bindung ähnelt eher der WSHttpBinding mit der einzigen Ausnahme, dass sie die bidirektionale Kommunikation erleichtert, dh, Nachrichten können sowohl von Clients als auch von Diensten gesendet und empfangen werden. Es wird von der WSDualHttpBinding-Klasse angeboten.

  • Web binding - Die Webbindung dient zur Darstellung von WCF-Diensten in Form von HTTP-Anforderungen unter Verwendung von HTTP-GET, HTTP-POST usw. Sie wird von der WebHttpBinding-Klasse angeboten und häufig in sozialen Netzwerken verwendet.

  • MSMQ Binding- Es wird von der NetMsmqBinding-Klasse angeboten und dient zur Bereitstellung von Lösungen für den Fall, dass der Dienst eine Nachricht zu einem anderen Zeitpunkt als dem vom Client gesendeten verarbeitet. Die MSMQ-Bindung verwendet MSMQ für den Transport und bietet Unterstützung für getrennte Nachrichten in der Warteschlange. MSMQ ist eine Implementierung für die Nachrichtenwarteschlange, die von Microsoft angeboten wird.

  • Federated WS Binding- Es handelt sich um eine spezielle Form der WS-Bindung, die Unterstützung für Verbundsicherheit bietet. Es wird von der WSFederationHttpBinding-Klasse angeboten.

  • Peer Network Binding- Wird von der NetPeerTCPBinding-Klasse angeboten und hauptsächlich in Dateifreigabesystemen verwendet. Es verwendet das TCP-Protokoll, verwendet jedoch Peer-Netzwerke als Transportmittel. In diesem Netzwerk fungiert jeder Computer (Knoten) als Client und Server für die anderen Knoten. Peer-Netzwerkbindung wird in Dateifreigabesystemen wie Torrent verwendet.

  • MSMQ Integration Binding - Wird von der MsmqIntegrationBinding-Klasse angeboten und unterstützt die Kommunikation mit vorhandenen Systemen, die über MSMQ (Microsoft Message Queuing) kommunizieren.

Abgesehen davon ist es auch möglich, benutzerdefinierte Bindungen zu erstellen. Da es jedoch möglich ist, die Konfigurationseigenschaften jeder WCF-Bindung zu optimieren, besteht selten die Notwendigkeit, benutzerdefinierte Bindungen zu erstellen.