2009-06-30 34 views
5

Guys/Gals chúng tôi đang có hiệu suất khủng khiếp với trang web của chúng tôi sử dụng WCF làm ứng dụng sau này. Chúng tôi đang sử dụng bảo mật cấp độ tin nhắn và chứng chỉ (xác thực lẫn nhau). Chúng tôi có bộ nhớ đệm nhà máy kênh trong đối tượng áp dụng:Hiệu suất khủng khiếp với WCF và chứng chỉ (xác thực lẫn nhau)

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 

     Dim loChannelFactor As New ChannelFactory(Of OurReference.IWCFChannel)("ClientEndpoint") 
     loChannelFactor.Open() 
     Application.Add("ChannelFactory", loChannelFactor) 
End Sub 

Trong mỗi trang mà chúng ta cần dữ liệu chúng tôi thực hiện như sau:

Dim Proxy = DirectCast(voWebApp("ChannelFactory"), ChannelFactory(Of OurInfoReference.IOurInfoChannel)).CreateChannel 

Proxy.DataCall() 

If roWCFService IsNot Nothing Then 
     CType(roWCFService, ICommunicationObject).Close() 
     roWCFService = Nothing 
End If 

Ngoài ra tôi đã thiết establishsecuritycontext = true.

Chúng tôi không muốn lưu trữ proxy vì phải gây rối với trạng thái proxy bị lỗi. Theo như tôi biết bộ nhớ đệm kênh ngăn xếp nên là đủ anyways. Khi tôi bật theo dõi tôi thấy một loạt các lệnh SCT thay vì chỉ cho các cuộc gọi đầu tiên như tôi mong đợi. Có ai biết chuyện gì đang xảy ra không. Chúng tôi có đang lưu vào bộ nhớ cache của nhà máy kênh không chính xác không?

cảm ơn, Ncage

+0

Vui lòng tham khảo bài viết này có thể giúp bạn. http://webservices20.blogspot.com/2009/01/wcf-performance-gearing-up-your-service.html – Verybiztalker

Trả lời

5

Hình như bạn có thể giải quyết nó bằng một chứng chỉ từ một cơ quan ceritificate:

"makecert là một công cụ được cung cấp bởi Microsoft để tạo chứng chỉ kiểm tra có thể được sử dụng trong sự phát triển của Sản phẩm (Chỉ dành cho mục đích phát triển và thử nghiệm). Những chứng chỉ này cũng có vấn đề về hiệu suất, một số hoạt động mã hóa nhất định có thể hoạt động chậm khi chúng được sử dụng. Chứng chỉ được cấp bởi Tổ chức phát hành chứng thực không có vấn đề này và đó là vấn đề. "

http://weblogs.asp.net/cibrax/archive/2006/08/08/Creating-X509-Certificates-for-WSE-or-WCF.aspx

Edit: Có thể hoạt động thêm là do bắt tay ban đầu khi tạo một phiên làm việc. WCF mặc định là mỗi cuộc gọi, đó là một phiên mới được tạo ra cho mỗi cuộc gọi. Bạn có thể thử đánh dấu hợp đồng của bạn với:

[ServiceContract (Session = true)]

Điều đó có thể duy trì phiên họp và tránh những cái bắt tay ban đầu.

+0

Thực ra chúng tôi đang sử dụng chứng chỉ ủy thác. Chúng tôi không sử dụng chứng chỉ tự ký. – coding4fun

+0

Thực tế thú vị, tôi sẽ lưu ý điều này cho nghiên cứu trong tương lai. – jpierson

0

Tôi còn nhớ một vấn đề tương tự, tuy nhiên nó đã là một cách tốt 18 tháng trước. Tôi đã tìm thấy this trong khi có cái nhìn nhanh về cách tôi giải quyết vấn đề. Nó có thể giúp, tôi sẽ chỉnh sửa câu trả lời của tôi khi tôi tìm thấy những gì tôi đang tìm kiếm!

+0

Tôi thực sự thấy điều này trước đây. Trong khi tôi đồng ý với anh chàng nếu bạn có một loạt các khách hàng ẩn danh kết nối và thực hiện một cuộc gọi và sau đó ngắt kết nối sau đó đề xuất của ông sẽ làm việc nhưng tôi thấy điều này rất khó xảy ra.Nó có nhiều khả năng bạn muốn một khách hàng kết nối và thực hiện nhiều cuộc gọi và không phải tạo ngăn xếp giao tiếp mỗi lần. Nếu bạn đã thiết lập đúng, cuộc gọi đầu tiên sẽ phát ra cuộc gọi đồng bộ hóa + không đồng bộ và mọi cuộc gọi sau đó sẽ chỉ phát ra cuộc gọi mã hóa đồng bộ hóa. – coding4fun

0

Các cuộc gọi SCT/RST bổ sung đang thiết lập bối cảnh bảo mật. Nếu bạn tạo lại proxy trên mỗi cuộc gọi, ngữ cảnh bảo mật là chi phí không cần thiết. Tắt nó đi.

Cách bạn sử dụng nhà máy là tốt. Tuy nhiên, việc xử lý lỗi và đóng proxy của bạn thì không. Đảm bảo rằng bạn đóng hoặc hủy proxy trong mọi trường hợp. Kiểm tra msdn cho mẫu được đề xuất.

Ngoài ra, bạn có thể cung cấp một số số liệu về hiệu suất kém không?

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