ฉันจะเพิ่มระยะหมดเวลาเริ่มต้นให้มากกว่า 1 นาทีในบริการ WCF ได้อย่างไร
ฉันจะเพิ่มระยะหมดเวลาเริ่มต้นให้มากกว่า 1 นาทีในบริการ WCF ได้อย่างไร
คำตอบ:
คุณหมายถึงฝั่งเซิร์ฟเวอร์หรือฝั่งไคลเอ็นต์?
สำหรับไคลเอนต์คุณต้องการปรับแอตทริบิวต์sendTimeoutขององค์ประกอบการเชื่อมโยง สำหรับการให้บริการคุณจะต้องการปรับReceiveTimeoutแอตทริบิวต์ของ elemnent ผูกพัน
<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>
....
แน่นอนคุณต้องแมปจุดสิ้นสุดที่คุณต้องการกับการเชื่อมโยงนั้น ๆ
receiveTimeout
ในความมุ่งมั่นที่ฝั่งเซิร์ฟเวอร์ควบคุมของความเกียจคร้านสำหรับผูกเซสชั่นตาม ตัวอย่างเช่นเซิร์ฟเวอร์จะไม่ใช้การตั้งค่านี้สำหรับการเชื่อมโยง HTTP พื้นฐาน คุณต้องหมดเวลาการประมวลผลฝั่งเซิร์ฟเวอร์ของคุณเองสำหรับ WCF
ภายใต้เมนูเครื่องมือใน Visual Studio 2008 (หรือ 2005 หากคุณติดตั้งสิ่งที่ถูกต้องของ WCF) จะมีตัวเลือกที่เรียกว่า 'WCF Service Configuration Editor'
จากตรงนั้นคุณสามารถเปลี่ยนตัวเลือกการผูกสำหรับทั้งไคลเอนต์และบริการหนึ่งในตัวเลือกเหล่านี้คือการหมดเวลา
คุณสามารถเลือกได้สองวิธี:
1) ตามรหัสในไคลเอนต์
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) โดย WebConfig ในเว็บเซิร์ฟเวอร์
<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>
สำหรับรายละเอียดเพิ่มเติมโปรดดูเอกสารอย่างเป็นทางการ
การหมดเวลาที่แตกต่างกันหมายถึงสิ่งที่แตกต่างกัน เมื่อคุณทำงานกับไคลเอนต์ .. คุณอาจจะดู SendTimeout เป็นส่วนใหญ่ - ตรวจสอบข้อมูลอ้างอิงนี้ - คำอธิบายที่ยอดเยี่ยมและเกี่ยวข้อง: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
นอกเหนือจากระยะหมดเวลาการเชื่อมโยง (ซึ่งอยู่ในTimespan
s) คุณอาจต้องใช้สิ่งนี้ด้วย นี่คือวินาที
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->