2010-08-12 36 views
16

Kênh truyền tải trong WCF sử dụng kết nối HTTP liên tục theo mặc định. Làm thế nào để kiểm soát thời gian chờ giữ cho những kết nối? Giá trị mặc định là 100. Tôi thấy rằng giá trị bằng cách theo dõi ứng dụng trong Procmon. Tôi đã không tìm thấy bất kỳ thiết lập trong phần tử ràng buộc vận tải http mà cấu hình thời gian chờ này. Có lớp .NET nào có thể kiểm soát thời gian chờ đó không?Cách đặt khoảng thời gian còn lại cho kết nối HTTP trong WCF

Trả lời

7

Hãy xem ở đây:

http://web.archive.org/web/20080721055556/http://blog.magenic.com/blogs/jons/archive/2007/05/04/The-Tao-of-Microsoft-WCF-CustomBinding-Configuration-Elements.aspx

Có một cuộc thảo luận chi tiết về thao tác giữ tài sản còn sống trong một kết nối http.

+2

Cám ơn bài nhưng điều này không trả lời câu hỏi. Câu hỏi không phải là về việc tắt tiếp tục sống nhưng về việc thiết lập giữ thời gian chờ còn sống. Vì vậy, tôi muốn giữ cho sống tiếp tục và tôi muốn kiểm soát thời gian của nó. –

+3

Url không tìm thấy, nó là một điều đáng tiếc – Kiquenet

0

Từ this answer và những gì tôi có thể đọc here, có vẻ như bạn muốn tạo liên kết http tùy chỉnh và đặt thuộc tính inactivityTimeout.

Từ bài viết MSDN:

<bindings> 
    <customBinding> 
    <binding name="Binding1"> 
     <reliableSession acknowledgementInterval="00:00:00.2000000" enableFlowControl="true" 
         maxTransferWindowSize="32" inactivityTimeout="00:10:00" maxPendingChannels="128" 
         maxRetryCount="8" ordered="true" /> 
     <security mode="None"/> 
     <httpTransport authenticationScheme="Anonymous" bypassProxyOnLocal="false" 
        hostNameComparisonMode="StrongWildcard" 
        proxyAuthenticationScheme="Anonymous" realm="" 
        useDefaultWebProxy="true" /> 
    </binding> 
    </customBinding> 
</bindings> 
+1

No. Tôi muốn thiết lập HTTP giữ cho sống không đáng tin cậy phiên giữ sống. HTTP tiếp tục được mô tả trong đặc tả giao thức HTTP. –

+0

Dường như kết nối HTTP phải luôn liên tục, theo RFC 2616 (http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.1). – louisgab

+1

Tôi không nghĩ vậy. RFC nói rằng việc triển khai HTTP nên thực hiện các kết nối liên tục HTTP. Không chỉ sử dụng kết nối liên tục. –

0

Làm thế nào về điều này? Dường như nó có thể là một chức năng của máy chủ IIS của bạn và không có gì để làm với dịch vụ WCF? Tôi biết liên kết này áp dụng cho IIS6, nhưng có lẽ nó phục vụ như một nền tảng cho một cái gì đó tương tự trong IIS7? http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/73566f83-c257-4941-8ed8-7ae45b2e7985.mspx?mfr=true

+1

Tôi đã cố gắng thiết lập thời gian chờ kết nối trên IIS và nó không hoạt động. Nó không liên quan đến việc giữ cho khung cảnh sống động. Dù sao tôi sẽ thử lại trong vài ngày tới. Nếu nó hoạt động, tôi sẽ thiết lập tiền thưởng mới và trao cho bạn. –

1

Nghe có vẻ như tôi muốn điều chỉnh tiêu đề HTTP Keep-Alive. Bạn nên đọc this article trên HTTP tiếp tục sống và trước tiên hãy xác định xem điều này có thực sự đáng để bạn dành thời gian không.

Nếu có, hãy thử tạo Message Inspector. Điều này sẽ cho phép bạn sửa đổi tiêu đề HTTP cho mỗi thư được gửi đi:

public class KeepAliveMessageInspector : IClientMessageInspector 
{ 
    // ... 

    public object BeforeSendRequest(
     ref System.ServiceModel.Channels.Message request, 
     System.ServiceModel.IClientChannel channel) 
    { 
     // Add/modify the Keep-Alive header 
     var httpRequestMessage = new HttpRequestMessageProperty(); 
     httpRequestMessage.Headers.Add("Keep-Alive", "9000"); 
     request.Properties.Add(
      HttpRequestMessageProperty.Name, httpRequestMessage); 
     return null; 
    } 

    // ... 
} 
+2

Ý tưởng này thật thú vị. Tôi thấy một cái gì đó như thế trong giao tiếp với Cassini nhưng tôi nghĩ rằng nó không phải là tiêu đề tiêu chuẩn. Dù sao tôi sẽ thử nó trong vài ngày tới. Nếu nó hoạt động, tôi sẽ thiết lập tiền thưởng mới và trao cho bạn. –

+0

Btw. Tôi không cần phải sử dụng nó. Tôi chỉ muốn biết nếu nó có thể thay đổi nó bằng cách nào đó và nơi giá trị mặc định 100s đến từ. –

+0

@Ladislav Mrnka: Xin lỗi vì đã xóa bài đăng cũ này nhưng bạn đã có thể đặt hoặc đọc giá trị giữ lại HTTP này.Nếu có, tôi rất muốn biết thêm về nó. Cảm ơn –

1

Tôi đã tìm ra giải pháp cho việc này. Vấn đề là http.sys hạt nhân cơ bản có thời gian chờ riêng của nó và nó sẽ phá vỡ kết nối.

http://mmmreddy.wordpress.com/2013/07/11/wcf-use-of-http-transport-sharing-persistent-tcp-sessions/ 

netsh http add timeout timeouttype=idleconnectiontimeout value=120 

Ngoài ra, câu hỏi này là tương tự như sau What 130 second timeout is killig my WCF streaming service call?

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