2010-11-19 31 views
7

Tôi đã có một khách hàng WCF nói chuyện với một máy chủ WCF (trên cùng một máy). Chúng tôi sử dụng netTcpBinding với mức độ bảo mật thông báo (sử dụng customPermissionMode tùy chỉnh và triển khai tùy chỉnh các serviceCredentials). Dịch vụ được đánh dấu bằng InstanceContextMode.PerSession.Kết nối WCF net.tcp chết sau 9 giờ, 1 phút

Dịch vụ WCF tự lưu trữ trong dịch vụ Windows (không phải trong IIS).

Để giả mạo tiếp tục, chúng tôi có phương thức Ping mà khách hàng gọi mỗi 15 giây. Chúng tôi giữ proxy của khách hàng mở trong suốt thời gian tồn tại của chương trình khách hàng (vì việc khởi tạo phiên là tốn kém trong trường hợp của chúng tôi).

Mặc dù vậy, kết nối bị giảm sau 9 giờ, 1 phút và một chút (trong 10 lần chạy thử, 7 trong số đó đã chết sau 9h1m6s).

Điều duy nhất của hậu quả trong nhật ký WCF là thông báo "SocketConnection bị hủy bỏ", theo sau là một tập hợp ngoại lệ khác nhau, nhưng thường bao gồm ngoại lệ "kết nối ở trạng thái lỗi".

Có thời gian chờ trong WCF hoặc trong TCP/IP, điều này gây ra điều này không? Bởi vì tôi đang bối rối.

+2

10 lần chạy thử, mỗi lần kiểm tra trên 9 giờ? Tôi ngưỡng mộ sự kiên nhẫn của bạn. –

+0

Trong sự trung thực, đó là 2 lần chạy thử nghiệm của 4 khách hàng, và 2 cùng một lúc của 1 khách hàng. Vì vậy, chỉ có 18 giờ, và để lại qua đêm, anyway. –

+3

Nếu bạn suy nghĩ cẩn thận, '9x3600 + 60 + 6 <32768', đó là 2 công suất 15 – ajreal

Trả lời

3

Sau nhiều lần điều tra tẻ nhạt: Sau khoảng 9 giờ, máy khách WCF xác thực lại với dịch vụ. Một cái gì đó tôi đang làm trong bước xác thực là giết chết phiên hiện tại.

+0

+1 - Tôi gặp vấn đề này và độc lập đã rút ra kết luận tương tự. Ước gì tôi đã có được lợi ích của nghiên cứu của bạn trước, nhưng tôi không biết phải tìm kiếm gì. Tôi tò mò những gì đã xảy ra với xác thực? Trong trường hợp của chúng tôi, chúng tôi đã thực hiện xác thực tùy chỉnh và cố ý không cho phép cùng một khách hàng kết nối hai lần, được kiểm tra trên Xác thực. Vì vậy, việc tái xác nhận luôn thất bại. –

+0

@JoelLee: Chính xác điều đó, nhưng hơn nữa. Việc xác thực lại đã giết chết phiên phụ trợ trước đó, điều này đã kích hoạt một sự kiện 'Kicked', đã khiến tôi phá vỡ phiên WCF, làm chết khách hàng. –

2

Từ nhận xét của bạn ở trên, bạn đã chạy thử nghiệm cùng một lúc.

Chúng cũng có trên cùng một máy chủ, sử dụng cùng một hồ bơi ứng dụng?

Nếu vậy việc tái chế hồ bơi ứng dụng có thể đã khiến tất cả các kiểm tra dừng lại cùng một lúc.

+0

Có, cùng một máy chủ. Không sử dụng IIS, vì vậy không có hồ bơi ứng dụng. Hỏi anh chàng QA của tôi để bắt đầu các khách hàng loạng choạng, để xem liệu họ có chết cùng một lúc hay chỉ sau sự chậm trễ tương tự. –

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