2009-01-26 46 views
16

Giả sử tôi đang xử lý một dịch vụ liên quan đến việc gửi một lượng lớn dữ liệu.Điều chỉnh dịch vụ WCF

Nếu tôi thực hiện điều này với WCF, WCF sẽ điều chỉnh dịch vụ dựa trên lượng bộ nhớ mà mỗi yêu cầu cần thực hiện? Hoặc tôi sẽ nhận được liên tục ra khỏi bộ nhớ ngoại lệ mỗi khi tôi nhận được một số lượng lớn các truy cập vào dịch vụ của tôi?

Tôi khá tò mò như để đối phó với vấn đề này bên ngoài của WCF, tôi vẫn còn một chút mới để phát triển dịch vụ ...

+0

Bất kỳ ứng dụng .NET có thể tạo ra một ngoại lệ OutOfMemory. Tôi rất thích xem các máy chủ thực thi thông minh một ngày nào đó, nhưng có vẻ như nó sẽ yêu cầu một lớp giao tiếp khác giữa ứng dụng và máy chủ. Nếu nó đáng giá, nó có thể đã tồn tại cho Windows Services. –

Trả lời

12

Khi sử dụng thuộc tính ràng buộc và trình đọcQuotas như Andrew Hare gợi ý sẽ cho phép kích thước không giới hạn cho hầu hết các ứng dụng thực tế, hãy nhớ rằng bạn sẽ gặp phải các vấn đề khác như timeout nếu bạn chấp nhận lệnh chạy dài, không vấn đề dịch vụ đó được xây dựng như thế nào (sử dụng WCF hay không).

Không có vấn đề gì kích thước của thư của bạn, dịch vụ WCF sẽ cần phải được điều chỉnh để thực hiện để nó không bị ngập. Nếu bạn đang lưu trữ nó trong IIS hoặc WAS, bạn sẽ có thêm các tính năng tích hợp cho những môi trường lưu trữ đó sẽ làm cho dịch vụ của bạn nhiều hơn nữa "có sẵn cao". Tuy nhiên, bạn vẫn cần chú ý đến các vấn đề tương tranh. Cấu hình WCF sau đây cung cấp một ví dụ về thiết lập một số giá trị điều chỉnh.

<system.serviceModel> 

    ... 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="GenericServiceBehavior"> 
      <serviceTimeouts transactionTimeout="00:09:10"/> 
      <serviceThrottling 
      maxConcurrentCalls="20" 
      maxConcurrentSessions="20" 
      maxConcurrentInstances="20" 
      /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
+1

Chính xác những gì tôi đang làm sau. Tôi tưởng tượng rằng chúng ta sẽ trải qua một giai đoạn điều chỉnh sau khi giảm mức sử dụng bộ nhớ cho mỗi cuộc gọi càng nhiều càng tốt :) Câu trả lời tuyệt vời – Spence

3

WCF không có giới hạn dung lượng tải trọng mặc định sẽ từ chối tin nhắn qua số byte nhất định. Đây là cấu hình của khóa học trong phần ràng buộc của tập tin cấu hình của bạn. Dưới đây là một ví dụ thô với một basicHttpBinding hiển thị cho bạn rất nhiều các thuộc tính có sẵn cho bạn:

<bindings> 
    <basicHttpBinding> 
     <binding name="testBinding" maxReceivedMessageSize="2147483647"> 
      <readerQuotas 
       maxDepth="2147483647" 
       maxStringContentLength="2147483647" 
       maxArrayLength="2147483647" 
       maxBytesPerRead="2147483647" 
       maxNameTableCharCount="2147483647" /> 
     </binding> 
    </basicHttpBinding> 

Ý tưởng là bạn có thể tạo nhiều ràng buộc khác nhau mà bạn có thể sử dụng cho các kịch bản khác nhau. Điều này là tốt đẹp như bạn có thể tinh chỉnh như thế nào dịch vụ của bạn được tiêu thụ và chỉ tăng giới hạn kích thước tin nhắn cho các thiết bị đầu cuối cần chúng.

+0

Tôi hiểu những gì bạn nhận được, nhưng nếu tôi có thể kiểm soát kích thước của tin nhắn tôi sẽ. Phải yêu hình ảnh. – Spence

3

Nếu bạn đang sử dụng NetTCPBinding hoặc NetNamedPipeBinding bạn có thể sử dụng MaxConnections tài sản:

<bindings> 
    <netTcpBinding> 
    <binding name="myTCPBinding" maxConnections="15"/> 
    </netTcpBinding> 
</bindings> 
+0

Điều này có thể áp dụng cho tôi, vì vậy +1, nhưng EnocnRoll's câu trả lời rất rõ ràng Có lẽ lần sau: ( – Spence

+0

Yup - Tôi vừa mới mở rộng câu trả lời của mình một chút. :) –

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