Bagaimana cara meningkatkan batas waktu default menjadi lebih dari 1 menit pada layanan WCF?
Bagaimana cara meningkatkan batas waktu default menjadi lebih dari 1 menit pada layanan WCF?
Jawaban:
Apakah Anda mengacu pada sisi server atau sisi klien?
Untuk klien, Anda ingin menyesuaikan atribut sendTimeout dari elemen yang mengikat. Untuk layanan, Anda ingin menyesuaikan atribut acceptTimeout dari elemen yang mengikat.
<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>
....
Tentu saja, Anda harus memetakan titik akhir yang Anda inginkan ke pengikatan tertentu.
receiveTimeout
sisi server mengatur penentuan kemalasan untuk binding berbasis sesi. Misalnya, server tidak akan menggunakan pengaturan ini untuk binding basicHTTP. Anda harus memutar batas waktu pemrosesan sisi server Anda sendiri untuk WCF
Di bawah menu Alat di Visual Studio 2008 (atau 2005 jika Anda memiliki hal-hal WCF yang tepat diinstal) ada pilihan yang disebut 'WCF Service Configuration Editor'.
Dari sana Anda dapat mengubah opsi yang mengikat untuk klien dan layanan, salah satu dari opsi ini adalah untuk time-out.
Waktu tunggu yang berbeda memiliki arti yang berbeda pula. Ketika Anda bekerja pada klien .. Anda mungkin melihat SendTimeout - lihat referensi ini - penjelasan yang bagus dan relevan: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
Anda dapat memilih dua cara:
1) Dengan kode di klien
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) Dengan WebConfig di server 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>
Untuk lebih jelasnya lihat dokumentasi resmi
Selain batas waktu yang mengikat (yang ada di Timespan
s), Anda mungkin juga membutuhkan ini. Ini dalam hitungan detik.
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->