2011-11-01 32 views
8

Vì vậy, câu hỏi đặt ra là WCF4 có gọi kết nối máy khách với WCF-service không? Ví dụ, chúng tôi có ứng dụng ASP .NET là máy khách và dịch vụ (trên các máy riêng biệt). Sau đó, ở đâu đó trong mã chúng ta có một cái gì đó như thế:WCF4 (.NET Framework 4) có hỗ trợ ghép nối kết nối máy khách không?

ServiceClient client = new ServiceClient(); 
// Here some work with service goes... 

phép nói rằng chúng tôi có một dịch vụ khác gọi trong anither đoạn mã:

ServceClient client2 = new ServiceClient(); 
// Another one processing... 

Vì vậy, sẽ client2 kết nối lấy từ hồ bơi kết nối?

+0

Bạn nghĩ gì về loại hồ bơi nào. Bạn phải tự tạo các nhóm ứng dụng khách và thực hiện logic. Vì vậy, câu hỏi là một chút khó hiểu. Xem http://blogs.msdn.com/b/wenlong/archive/2007/11/14/a-sample-for-wcf-client-proxy-pooling.aspx. – sprinter252

+0

@ sprinter252 Tôi có nghĩa là 'bản địa tổng hợp' những gì được thực hiện bởi 'trình điều khiển WCf'. Điều tương tự là kết nối ADO tổng hợp. – kseen

+1

Vì vậy, sau đó câu trả lời nên được rằng nó phụ thuộc vào [ObjectPooling (MinPoolSize = 0, MaxPoolSize = 5)] - thuộc tính được xác định trên dịch vụ của bạn tôi đoán. – sprinter252

Trả lời

15

Việc "gộp" phụ thuộc vào giao thức truyền tải đã sử dụng. Đối với HTTP WCF theo mặc định sử dụng HTTP persistent connections mà sống trong khoảng thời gian ngắn (họ là closed after 100s of inactivity) và có thể được tái sử dụng bởi các yêu cầu tiếp theo (ngay cả từ trường hợp proxy khác nhau). Đối với đường ống TCP và đặt tên WCF, hãy cung cấp built-in pooling.

2

Tại sao bạn làm điều đó? WCF có thể chấp nhận nhiều Yêu cầu trên một Khách hàng với ConcurrencyMode.Multiple. Vì vậy, nó sẽ không có ý nghĩa nhiều để khởi tạo hai khách hàng ..

WCF ServiceContract có ba thuộc tính quan trọng đối với hành vi này,

InstanceContextMode

  • PerSession (Tạo mỗi phiên một Instance của Dịch vụ)
  • Độc thân (Tạo ra một trường hợp riêng lẻ cho từng Khách hàng)
  • PerCall (Tạo mỗi cuộc gọi cho một trường hợp dịch vụ)

ConcurrencyMode

  • Nhiều (Khách hàng có thể thực hiện nhiều cuộc gọi cùng một lúc -> Multithreaded)
  • đơn (Khách hàng có thể thực hiện một cuộc gọi và khác phải chờ cho đến khi cuộc gọi khác hoàn thành)
  • Reentrant (Khách hàng có thể thực hiện nhiều cuộc gọi cùng lúc, tôi không biết chính xác nhưng tôi nghĩ nó giống như khi một cuộc gọi sử dụng dịch vụ wcf khác, một cuộc gọi khác có thể được xử lý cho đến khi cuộc gọi dịch vụ wcf khác hoàn tất, nó giải phóng khóa giữa thời gian gọi dịch vụ WCF được thực hiện và đáp ứng)

SessionMode

  • phép (Client có thể sử dụng một phiên nhưng không phải)
  • NotAllowed (Client không thể sử dụng Session)
  • Required (Client phải sử dụng phiên)

Hầu hết thời gian tôi sử dụng InstanceContextMode.PerSession (Bởi vì khách hàng 1 không có quyền truy cập vào các Biến trong Dịch vụ của Khách hàng 2), ConcurrencyMode.MultipleSessionMode.Required.

Bạn cũng có thể chỉ định số lượng Instances có thể được khởi tạo, bao nhiêu cuộc gọi đồng thời có thể được thực hiện và có thể sử dụng bao nhiêu phiên.

+0

Bạn nên dành nhiều thời gian hơn để định dạng câu trả lời của mình. Rất ít câu trả lời được đọc có định dạng sai (và do đó bạn sẽ nhận được ít phiếu bầu hơn) – jgauffin

+0

Câu trả lời của bạn liên quan đến câu hỏi như thế nào? Phiên làm việc, chế độ ngữ cảnh cá thể và chế độ đồng thời không liên quan đến việc sử dụng lại kết nối truyền tải - đó là lý do tại sao việc kết nối gộp lại tồn tại. Ngay cả với tất cả mọi thứ bạn đề cập đến kết nối tổng hợp vẫn có thể được sử dụng dưới mui xe để cải thiện hiệu suất. –

+0

Câu trả lời của tôi liên quan đến Ví dụ của anh ta, vì anh ta đang mở hai máy khách. Vì vậy, tôi nghĩ nó sẽ hữu ích cho anh ta – RaphaelH

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