WCF - Dịch vụ ràng buộc

Ràng buộc dịch vụ WCF là một tập hợp nhiều phần tử, trong đó mỗi phần tử xác định cách dịch vụ giao tiếp với máy khách. Phần tử truyền tải và phần tử mã hóa thông điệp là hai thành phần quan trọng nhất của mỗi ràng buộc. Trong chương này, chúng ta sẽ thảo luận về các ràng buộc dịch vụ WCF khác nhau thường được sử dụng.

Ràng buộc cơ bản

Liên kết cơ bản được cung cấp bởi lớp BasicHttpBinding. Nó sử dụng giao thức HTTP để vận chuyển và đại diện cho một dịch vụ WCF như một dịch vụ web ASP.NET (dịch vụ web ASMX), để các khách hàng cũ sử dụng dịch vụ web ASMX có thể sử dụng các dịch vụ mới một cách thuận tiện.

Liên kết cơ bản được đặt làm ràng buộc mặc định trong dịch vụ web WCF do Silverlight kích hoạt và là ràng buộc tiêu chuẩn cho các giao tiếp theo kiểu dịch vụ web. Nó không hỗ trợ nhắn tin đáng tin cậy.

Dưới đây là đoạn mã mô tả cài đặt mặc định cho liên kết cơ bản.

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

Các cài đặt mặc định ở trên có những hạn chế rõ ràng, vì kích thước tin nhắn bị hạn chế và không có chế độ bảo mật. Tuy nhiên, tùy chỉnh ràng buộc cơ bản giải quyết vấn đề này như bên dưới.

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

Dịch vụ Web ràng buộc

Liên kết Dịch vụ Web (WS) được cung cấp bởi lớp WSHttpBinding. Nó khá giống với ràng buộc cơ bản và sử dụng các giao thức giống nhau để truyền tải, nhưng cung cấp một số thông số kỹ thuật WS– * chẳng hạn như WS – Tin nhắn đáng tin cậy, WS – Giao dịch, WS – Bảo mật, v.v. Tóm lại, WSHttpBinding bằng tổng các thông số kỹ thuật cơ bản củaHttpBinding và WS– *. Dưới đây là đoạn mã mô tả các cài đặt mặc định cho WS Binding -

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

Liên kết IPC

Liên kết IPC sử dụng đường ống được đặt tên và được cung cấp bởi lớp netNamedPipeBinding. Đây là ràng buộc nhanh nhất và an toàn nhất trong số tất cả các ràng buộc hiện có. Mặc dù bảo mật mức thư không được hỗ trợ ở đây, nhưng các thư được bảo mật theo mặc định vì bảo mật truyền tải mạnh mẽ. Dưới đây là đoạn mã mô tả cài đặt mặc định cho liên kết IPC -

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

Các loại ràng buộc dịch vụ khác

  • TCP Binding- Được cung cấp bởi lớp NetTCPBinding, ràng buộc này sử dụng giao thức TCP để giao tiếp trong cùng một mạng và mã hóa thông điệp ở định dạng nhị phân. Ràng buộc này được coi là đáng tin cậy nhất so với những ràng buộc khác.

  • WS Dual Binding- Loại ràng buộc này giống với WSHttpBinding hơn với ngoại lệ duy nhất là nó tạo điều kiện giao tiếp hai chiều, tức là các thông điệp có thể được gửi và nhận bởi cả khách hàng và dịch vụ. Nó được cung cấp bởi lớp WSDualHttpBinding.

  • Web binding - Liên kết web được thiết kế để đại diện cho các dịch vụ WCF dưới dạng các yêu cầu HTTP bằng cách sử dụng HTTP-GET, HTTP-POST, v.v. Nó được cung cấp bởi lớp WebHttpBinding và được sử dụng phổ biến với các mạng xã hội.

  • MSMQ Binding- Nó được cung cấp bởi lớp NetMsmqBinding và được sử dụng để cung cấp các giải pháp trong trường hợp dịch vụ xử lý tin nhắn vào một thời điểm khác với tin nhắn được gửi bởi khách hàng. Liên kết MSMQ sử dụng MSMQ để vận chuyển và cung cấp hỗ trợ cho tin nhắn riêng biệt được xếp hàng đợi. MSMQ là một triển khai cho xếp hàng tin nhắn do Microsoft cung cấp.

  • Federated WS Binding- Đây là một dạng ràng buộc WS cụ thể và cung cấp hỗ trợ cho bảo mật liên hợp. Nó được cung cấp bởi lớp WSFederationHttpBinding.

  • Peer Network Binding- Được cung cấp bởi lớp NetPeerTCPBinding, nó chủ yếu được sử dụng trong các hệ thống chia sẻ tệp. Nó sử dụng giao thức TCP nhưng sử dụng mạng ngang hàng làm phương tiện truyền tải. Trong mạng này, mỗi máy (nút) hoạt động như một máy khách và một máy chủ cho các nút khác. Liên kết mạng ngang hàng được sử dụng trong các hệ thống chia sẻ tệp như torrent.

  • MSMQ Integration Binding - Được cung cấp bởi lớp MsmqIntegrationBinding, nó giúp giao tiếp với các hệ thống hiện có giao tiếp thông qua MSMQ (Microsoft Message Queuing).

Ngoài những thứ này, bạn cũng có thể tạo các ràng buộc tùy chỉnh. Tuy nhiên, vì có thể điều chỉnh các thuộc tính cấu hình của từng ràng buộc WCF, nhu cầu tạo liên kết tùy chỉnh hiếm khi phát sinh.