2009-09-02 47 views
8

Tôi đang tạo ứng dụng .NET 3.5 Winforms sử dụng dịch vụ WCF (liên kết wsHttp) để liên lạc với máy chủ của tôi lấy dữ liệu từ SQL Server và chuyển nó về Winforms ứng dụng (Smart Client). Tôi nhận thấy kể từ khi chạy Windows 7 RTM có khoảng một sự chậm trễ 30 giây lần đầu tiên WCF giao tiếp, từ thời điểm đó về phía trước nó bình thường như trước.Dịch vụ web chậm (và dịch vụ WCF) gọi từ Windows 7

Tôi nhận thấy một ứng dụng khác (hệ thống cấp phép Desaware) sử dụng dịch vụ ASMX cũng gặp phải vấn đề tương tự, chậm trễ khởi động khi đó tất cả đều ổn.

Lần khởi động đầu tiên này không phải là sự tuân thủ .NET/vấn đề JIT, tôi có thể đóng ứng dụng ngay lập tức và thực hiện lại. Máy chủ đang chạy Windows 2003/IIS 6. Tất cả đều tốt trước Windows 7.

Tôi đã cố gắng xóa phần mềm chống vi-rút của mình, cùng một vấn đề. Tôi không thể tìm ra lý do tại sao có sự chậm trễ ban đầu này, một sự chậm trễ quan trọng ở đó. Tôi cũng nhận thấy trong cửa sổ Debug khi ứng dụng đang bắt đầu trì hoãn như dòng System.IdentityModel, có vẻ như có sự thay đổi về bảo mật/xác thực trên Windows 7, tôi cho rằng điều này gây ra sự chậm trễ này.

Bất kỳ ai có bất kỳ đề xuất nào về cách giải quyết vấn đề này? VS 2008/.NET 3.5.

Cảm ơn bạn.

Trả lời

14

Tôi đã thêm mục nhập sau đây vào cấu hình ràng buộc và dường như đã giải quyết được vấn đề.

useDefaultWebProxy = "false"

+0

Ước gì tôi có thể cung cấp nhiều hơn một upvote; điều này đã cứu ngày của tôi! Cảm ơn rất nhiều! –

0

Độ trễ 30 giây, có vẻ như đang đợi thứ gì đó và sau đó hết thời gian chờ sau 30 giây.

Đây có thể là điều cần làm với xác thực giữa máy tính Windows 7 và máy chủ của bạn. Kiểm tra nhật ký sự kiện sẽ là một nơi tốt để bắt đầu.

+0

Tôi đã kiểm tra nhật ký sự kiện ở cả hai đầu, tất cả đều kiểm tra tốt. – Neal

+0

Điều tiếp theo để kiểm tra là mạng. Cả hai máy trong cùng một tên miền? Có một tường lửa giữa các máy, hoặc giữa các máy và kiểm soát miền? Ngoài ra, kiểm tra từ Windows XP, chỉ trong trường hợp đã có một sự thay đổi trong mã. –

-1

này làm việc cho Windows của tôi 7 và kết nối với một WebServer

useDefaultWebProxy = "false"

cảm ơn Douglas

+6

-1: không phải chính xác câu trả lời trước đó đã nói gì chưa? –

2

tôi đã trải qua cùng vấn đề. Tôi tạo proxy của tôi sử dụng một đối tượng ChannelFactory, và phát hiện ra rằng ngoài việc xác định useDefaultWebProxy cho các ràng buộc server-side, nó cũng là cần thiết để xác định tùy chọn client-side:

HttpTransportBindingElement httpTransport = new HttpTransportBindingElement 
{ 
    MaxBufferPoolSize = int.MaxValue, 
    MaxBufferSize = int.MaxValue, 
    MaxReceivedMessageSize = int.MaxValue, 
    AuthenticationScheme = System.Net.AuthenticationSchemes.Ntlm, 
    UseDefaultWebProxy = false 
} 

tôi thấy rằng vấn đề này chỉ xảy ra khi sử dụng thông tin đăng nhập Windows hiện tại. Nếu bạn vượt qua thông tin đăng nhập cụ thể thì hiệu suất sẽ như mong đợi. Tuy nhiên, thiết lập phía khách hàng UseDefaultWebProxy đã khắc phục sự cố.

Hy vọng điều này sẽ giúp ai đó, ở đâu đó!

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