2009-05-23 46 views
29

Tôi liên tục nhận được ngoại lệ sau trong Dịch vụ WCF .Net của tôi. "Dịch vụ HTTP có tại http://MyServer/TestWCF/MyService.svc quá bận."Lỗi dịch vụ quá bận trong WCF

Tôi có thiếu gì đó ở đây không?

Đang sử dụng liên kết http cơ bản và đã bật điều chỉnh WCF.

<basicHttpBinding> 
     <binding name="BasicHttpBinding_MyService" maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" textEncoding="utf-16" sendTimeout="00:01:00" > 
      <readerQuotas maxStringContentLength="2147483647" maxArrayLength="163840000" 
         maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="16384" /> 
     </binding> 

. . . .

<behavior name="MyWCFServices.MyServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <serviceThrottling 
        maxConcurrentCalls="16" 
        maxConcurrentInstances="2147483647" 
        maxConcurrentSessions="10"/> 
     </behavior> 

Sẽ điều chỉnh giúp giải quyết vấn đề? Ngoài ra, tôi có thể biết các giá trị tham số được khuyến nghị để điều chỉnh cho một trang web lưu lượng truy cập cao không?

Trả lời

10

Bạn chắc chắn có thể cố gắng tăng maxConcurrentSessionsmaxConcurrentCalls trong hành vi điều chỉnh dịch vụ của bạn đến các giá trị chuẩn 30 hoặc hơn và xem điều đó có làm cho lỗi không biến mất. Máy chủ quá bận dường như chỉ ra rằng có nhiều yêu cầu đến hơn khu vực được phép điều chỉnh dịch vụ của bạn và chúng đã bị hủy vì không có trường hợp dịch vụ nào có sẵn để phục vụ chúng trong khoảng thời gian chờ nhất định.

+0

cảm ơn câu trả lời của bạn ... tôi có cần bật tính năng điều chỉnh ở cả máy khách và máy chủ web.configs không? –

+0

cũng có, tôi muốn biết giá trị được đề nghị cho tham số maxConcurrentInstances là gì? –

+0

Xin chào Steve - không cần phải xử lý điều này trên máy khách - đây chỉ là cài đặt phía máy chủ. Đối với maxConcurrentInstances: hãy tự hỏi mình có bao nhiêu yêu cầu từ các máy khách mà bạn muốn xử lý cùng một lúc. 5? 10? Mất bao lâu để xử lý yêu cầu? Một điểm khởi đầu tốt có thể là 30 và xem nếu a) điều này giúp dịch vụ của bạn phản hồi nhanh hơn và b) không làm quá tải máy chủ của bạn. Tinh chỉnh khi cần thiết sau khi bạn thấy nó hoạt động như thế nào. –

2

Nó không chỉ là maxConcurrentSessions, nó còn kéo dài bao lâu.

Nếu khách hàng không đóng kết nối, nó sẽ vẫn mở cho đến khi hết thời gian chờ. Sau đó, bạn có thể đạt đến giới hạn maxConcurrentSessions với rất ít hoạt động trên máy chủ.

+2

Thực ra, khách hàng không nên sử dụng câu lệnh sử dụng. Làm sạch nên được xử lý một cách rõ ràng. Xem http://msdn.microsoft.com/en-us/library/aa355056.aspx để biết thêm chi tiết. –

+0

@Anthony, cảm ơn nhận xét, tôi đã xóa phần sử dụng. Đây là từ năm 2009, khi tôi còn trẻ và không biết gì hơn :) –

+1

@AntSwift: Nhiều người biết điều đó nhưng không làm điều này mặc dù. – abatishchev

1

Nguồn duy nhất của ngoại lệ này mà tôi biết là nếu bạn đang sử dụng phiên và bạn quản lý để đạt được mức tăng tốc MaxPendingChannels. Mặc định của nó là một cái gì đó khá thấp như 4. Bạn có thể thử thiết lập nó cao hơn (128 ví dụ), hoặc nếu bạn chỉ muốn repro, đặt nó là 1 và bạn sẽ thấy nó dưới thử nghiệm tải.

Xem ở đây để biết thêm thông tin về các phiên: http://msdn.microsoft.com/en-us/library/ms733795.aspx

9

câu trả lời của tôi sẽ là, kiểm tra xem các hồ bơi ứng dụng khởi động và tốt?

Tôi đã nhìn thấy lỗi này xảy ra khi nhóm ứng dụng đã chết do các ngoại lệ bị ném mà không bị bắt.

Hãy xem xét ví dụ: phần cấu hình tùy chỉnh - có lỗi trong đó, sẽ khiến ứng dụng của bạn không thành công trước khi nó bắt đầu. Quá nhiều trong số này trong một khoảng thời gian ngắn sẽ giết hồ bơi ứng dụng.

+0

Kiểm tra điều này trước. Nó có thể "nhìn" ok, nhưng nếu bạn ngăn chặn các hồ bơi ứng dụng từ người quản lý, bạn sẽ không thể khởi động lại nó. Để mọi thứ diễn ra một lần nữa, sử dụng "net stop w3svc" rồi "net start w3svc" từ dòng lệnh. – tofutim

+0

Cảm ơn bạn đã tiết kiệm được sự tỉnh táo của mình khi đang trên đường ra khỏi cửa. – eouw0o83hf

+0

Điều này đã làm điều đó cho tôi guys! Tái chế các hồ bơi ứng dụng và bingo – JeremyS

4

Nếu bạn đang phục vụ đang chạy dưới tài khoản của mình (Identity), bạn có thể đã thay đổi mật khẩu của mình gần đây - bạn cần đặt lại mật khẩu cho nhóm ứng dụng IIS trong Cài đặt nâng cao | Hộp thoại nhận dạng.

+1

+1 Điều này chỉ xảy ra trong môi trường sản xuất. Thông báo lỗi rất gây hiểu lầm cho biết máy chủ bận. Boo. Cảm ơn bạn đã chỉ ra điều này! –

1

Tôi vừa gặp phải lỗi này và nó bị lu mờ xuống một vấn đề cấu hình đơn giản. Tôi đã có một dịch vụ trên cùng một cổng và cùng một giao diện (dịch vụ giả). Tôi đã chạy dịch vụ bằng công tắc dòng lệnh thích hợp để chạy dịch vụ "gốc" mà tôi dự định. Lỗi đã biến mất.

0

Giải pháp của tôi sẽ là, Kiểm tra tệp App.Config, cho dù thẻ dịch vụ có dành cho dịch vụ cụ thể này hay không.

ví dụ:

<service name="MyServices.ServiceName"> 
     <endpoint address="" binding="wsHttpBinding" bindingConfiguration="TestBinding" contract="MyServices.ServiceName"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/MyServices/ServiceName/" /> 
      </baseAddresses> 
     </host> 
</service> 
2

Hãy chắc chắn rằng bạn kiểm tra ngoại lệ bên trong, quá; trong triển khai của chúng tôi, chúng tôi vô hiệu hóa các hồ bơi ứng dụng của một dịch vụ web WCF, và khách hàng bắt đầu nhận được lỗi này trong thời gian đó:

System.ServiceModel.ServerTooBusyException: The HTTP service located at https://ourserver.x.com/path/service.svc is too busy. ---> System.Net.WebException: The remote server returned an error: (503) Server Unavailable.

Vì vậy, trong trường hợp này lỗi HTTP 503 đang được (? mis) hiểu là "máy chủ quá bận".

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