2009-06-11 32 views
6

Làm cách nào để kiểm tra hiệu ứng của từng cài đặt thời gian chờ WCF? Tôi muốn đảm bảo rằng tôi chọn các giá trị tốt và tôi cũng muốn đảm bảo rằng mã xử lý ngoại lệ của tôi là vững chắc.Làm cách nào để kiểm tra cài đặt thời gian chờ WCF?

Tôi đã tạo chương trình máy khách và dịch vụ WCF máy chủ để kiểm tra cài đặt thời gian chờ. Trong thực hiện dịch vụ của tôi, tôi đã thêm một Thread.Sleep (5000). Ở phía máy khách, thiết lập duy nhất gây ra một thời gian chờ xảy ra là sendTimeout.

Cho dù tôi sử dụng giá trị nào trong tất cả các cài đặt khác, thời gian chờ không bao giờ xảy ra. Làm cách nào để kiểm tra tất cả các cài đặt khác?

Dưới đây là các cài đặt tôi muốn kiểm tra: sendTimeout, receiveTimeout, closeTimeout, openTimeout và inactivityTimeout (trong trustedSessions).

Chỉnh sửa 19 feb 2009: Chỉnh sửa này chỉ để cho biết rằng tôi vẫn chưa tìm được cách để kiểm tra cài đặt thời gian chờ WCF.

Trả lời

1

Không phải là câu trả lời hoàn chỉnh, nhưng giải thích về các giá trị thời gian chờ được liên kết bên dưới có thể hữu ích.

http://social.msdn.microsoft.com/forums/en-US/wcf/thread/84551e45-19a2-4d0d-bcc0-516a4041943d/

+0

Cảm ơn Brian, đó thực sự là một liên kết hữu ích. Nó không trả lời câu hỏi của tôi về làm thế nào để đơn vị kiểm tra thời gian chờ nhưng nó sẽ giúp đỡ dù sao. – Sylvain

1

Nếu bạn nhìn vào đúng nơi, bạn có thể nhận được các sự kiện kênh và sửa đổi thử nghiệm của bạn phải nhận thức được chúng. Kết nối là một phương thức boolean trên dịch vụ WCF. Tôi đã sử dụng svcutil để tạo ra một lớp proxy bằng cách sử dụng các phương thức async.

private StateManagerClient _stateManagerClient; 
private InstanceContext _site; 

public New() 
{ 
    _site = new InstanceContext(this); 
    _serviceClient = new ServiceClient(); 
    _serviceClient.ConnectCompleted += ServiceClient_ConnectCompleted; 
} 

private void ServiceClient_ConnectCompleted(object sender, ConnectCompletedEventArgs e) 
{ 
    //Bind to the channel events 
    foreach (IChannel a in _site.OutgoingChannels) { 
        a.Opened += Channel_Opened; 
        a.Faulted += Channel_Faulted; 
        a.Closing += Channel_Closing; 
        a.Closed += Channel_Closed; 
    } 
} 

private void Channel_Opened(object sender, EventArgs e) 
{ 
    
} 

private void Channel_Faulted(object sender, EventArgs e) 
{ 
    
} 

private void Channel_Closing(object sender, EventArgs e) 
{ 
    
} 

private void Channel_Closed(object sender, EventArgs e) 
{ 

} 

Tôi hy vọng điều này sẽ cung cấp cho bạn một số giá trị.

+0

Xin chào Chris, cảm ơn câu trả lời của bạn. Điều đó rất hữu ích để theo dõi các sự kiện kênh nhưng điều đó không giúp tôi gây ra các ngoại lệ thời gian chờ. Tôi thực sự cần phải gây ra các ngoại lệ thời gian chờ để chứng minh rằng mã xử lý lỗi của tôi là chính xác. – Sylvain

+0

Tôi không biết bất kỳ mã nào có thể buộc hết thời gian chờ nhưng bạn có thể giảm giá trị của mình để kích hoạt chúng dễ dàng hơn. –

+1

Xin chào Chris, tôi đã làm điều đó; Tôi đã giảm tất cả các giá trị thời gian chờ xuống còn 1 giây, trên cả hai mặt (máy khách/dịch vụ). Cài đặt duy nhất có hiệu quả là sendTimeout, được khách hàng nâng lên. Tất cả các cài đặt thời gian chờ khác không hiệu quả, đó là lý do tại sao tôi đăng câu hỏi này. Làm thế nào tôi có thể chọn giá trị tốt và đảm bảo tôi có mã xử lý thời gian chờ tốt nếu không có cách nào để tái tạo từng loại thời gian chờ trong môi trường được kiểm soát? – Sylvain

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