2011-06-30 30 views
12

Tôi có một khách hàng WCF sử dụng một wsHttpBinding, tôi muốn kích hoạt http keep-alive.WCF wsHttpBinding với http keepalive

Tôi hy vọng tôi có thể bật tính năng này bằng cách chỉ thay đổi cấu hình máy khách ... Tôi đã tìm thấy rất nhiều mô tả về cách bật lưu giữ liên kết cơ bản, nhưng không may mắn với wsHttpBinding ... điều này có thể không?

Rất cám ơn.

Dưới đây là khách hàng của tôi ràng buộc:

<wsHttpBinding> 
    <binding name="WSHttpBinding_IRepositoryService" closeTimeout="00:00:10" 
     openTimeout="00:00:10" receiveTimeout="00:05:00" sendTimeout="00:05:00" 
     bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="524288" maxReceivedMessageSize="655360" messageEncoding="Mtom" 
     textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
     <readerQuotas maxDepth="32" maxStringContentLength="81920" maxArrayLength="163840" 
     maxBytesPerRead="409600" maxNameTableCharCount="16384" /> 
     <reliableSession ordered="true" inactivityTimeout="00:10:00" 
     enabled="true" /> 
     <security mode="Message"> 
     <transport clientCredentialType="Windows" proxyCredentialType="None" 
      realm=""> 
      <extendedProtectionPolicy policyEnforcement="Never" /> 
     </transport> 
     <message clientCredentialType="Windows" negotiateServiceCredential="true" 
      algorithmSuite="Default" establishSecurityContext="true" /> 
     </security> 

    </binding> 
</wsHttpBinding> 

Trả lời

22

Bạn sẽ phải sử dụng một custom binding để vô hiệu hóa các Keep-Alive tiêu đề, kể từ khi tính năng mà không được tiếp xúc với bất kỳ được xây dựng trong ràng buộc các lớp học. Cách đơn giản nhất để đạt được điều này mà không cần phải xác định ràng buộc tùy chỉnh từ đầu, là tùy chỉnh cá thể BasicHttpBinding hoặc WSHttpBinding hiện tại được liên kết với proxy máy khách trong mã.

Dưới đây là một ví dụ:

var proxy = new MyServiceClient(); 
var customBinding = new CustomBinding(proxy.Endpoint.Binding); 
var transportElement = customBinding.Elements.Find<HttpTransportBindingElement>(); 
transportElement.KeepAliveEnabled = false; 

proxy.Endpoint.Binding = customBinding; 
+0

Trong trường hợp này, cấu hình không nhất thiết phải được áp dụng ở phía máy chủ. Sống động là tính năng truyền tải HTTP và tùy thuộc vào mọi người tham gia cách cấu hình nó. –

+0

@Ladislav Mrnka Hoàn toàn chính xác. Cài đặt này * có thể *, tuy nhiên, được áp dụng trên máy chủ. Tôi đã cập nhật câu trả lời của mình. –

+0

Rất cám ơn. Tôi đã không nhận ra keepalives đã được kích hoạt theo mặc định, vì vậy đó là một điều ít hơn cho tôi để làm :) – Nathan

4

Giữ sống được kích hoạt theo mặc định trên tất cả các bindings HTTP dựa và nó không phải là có thể tắt nó đi. Nếu bạn muốn tắt nó, bạn phải tạo toàn bộ ràng buộc tùy chỉnh mới và đặt keepAliveEnabled thành false trên httpTransport phần tử ràng buộc.

+5

Để được rõ ràng, nó không thể tắt giữ sống trên được xây dựng trong http dựa bindings (basicHttpBinding, wsHttpBinding, vv ..) bởi vì các ràng buộc này không phơi bày tài sản. Nó có thể được tắt trong các ràng buộc tùy chỉnh. Tôi biết đó là những gì bạn nói, nhưng cách bạn phrased nó đã gây nhầm lẫn và tôi muốn làm rõ. –

Các vấn đề liên quan