Làm cách nào để tăng thời gian chờ mặc định lên hơn 1 phút trên dịch vụ WCF?
Làm cách nào để tăng thời gian chờ mặc định lên hơn 1 phút trên dịch vụ WCF?
Câu trả lời:
Bạn đang đề cập đến phía máy chủ hoặc phía khách hàng?
Đối với một khách hàng, bạn sẽ muốn điều chỉnh thuộc tính sendTimeout của một thành phần ràng buộc. Đối với một dịch vụ, bạn sẽ muốn điều chỉnh thuộc tính receiveTimeout của một phần tử ràng buộc.
<system.serviceModel>
<bindings>
<netTcpBinding>
<binding name="longTimeoutBinding"
receiveTimeout="00:10:00" sendTimeout="00:10:00">
<security mode="None"/>
</binding>
</netTcpBinding>
</bindings>
<services>
<service name="longTimeoutService"
behaviorConfiguration="longTimeoutBehavior">
<endpoint address="net.tcp://localhost/longtimeout/"
binding="netTcpBinding" bindingConfiguration="longTimeoutBinding" />
</service>
....
Tất nhiên, bạn phải ánh xạ điểm cuối mong muốn của mình vào ràng buộc cụ thể đó.
receiveTimeout
phía máy chủ chi phối việc xác định tính nhàn rỗi cho các ràng buộc dựa trên phiên. Ví dụ: máy chủ sẽ không sử dụng cài đặt này cho các ràng buộc basicHTTP. Bạn phải cuộn thời gian xử lý phía máy chủ của riêng mình cho WCF
Trong menu Công cụ trong Visual Studio 2008 (hoặc 2005 nếu bạn đã cài đặt đúng công cụ WCF), có một tùy chọn gọi là 'Trình chỉnh sửa cấu hình dịch vụ WCF'.
Từ đó bạn có thể thay đổi các tùy chọn ràng buộc cho cả máy khách và dịch vụ, một trong những tùy chọn này sẽ dành cho thời gian chờ.
Thời gian chờ khác nhau có nghĩa là những điều khác nhau. Khi bạn đang làm việc trên máy khách .. có lẽ bạn đang tìm kiếm hầu hết tại SendTimeout - kiểm tra tham chiếu này - giải thích tuyệt vời và có liên quan: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
Bạn có thể chọn hai cách:
1) Theo mã trong máy khách
public static void Main()
{
Uri baseAddress = new Uri("http://localhost/MyServer/MyService");
try
{
ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService));
WSHttpBinding binding = new WSHttpBinding();
binding.OpenTimeout = new TimeSpan(0, 10, 0);
binding.CloseTimeout = new TimeSpan(0, 10, 0);
binding.SendTimeout = new TimeSpan(0, 10, 0);
binding.ReceiveTimeout = new TimeSpan(0, 10, 0);
serviceHost.AddServiceEndpoint("ICalculator", binding, baseAddress);
serviceHost.Open();
// The service can now be accessed.
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
}
catch (CommunicationException ex)
{
// Handle exception ...
}
}
2) Bởi WebConfig trong một máy chủ web
<configuration>
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding openTimeout="00:10:00"
closeTimeout="00:10:00"
sendTimeout="00:10:00"
receiveTimeout="00:10:00">
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
Để biết thêm chi tiết xem các tài liệu chính thức
Ngoài thời gian chờ ràng buộc (tính bằng Timespan
s), Bạn cũng có thể cần điều này. Đây là trong vài giây.
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->