WCF hizmetinde varsayılan zaman aşımı süresini 1 dakikadan daha fazla nasıl artırabilirim?
WCF hizmetinde varsayılan zaman aşımı süresini 1 dakikadan daha fazla nasıl artırabilirim?
Yanıtlar:
Sunucu tarafına mı yoksa istemci tarafına mı atıfta bulunuyorsunuz?
İstemci için, bir bağlama öğesinin sendTimeout özniteliğini ayarlamak istersiniz . Bir hizmet için, bir bağlayıcı öğenin takeTimeout özniteliğini ayarlamak istersiniz.
<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>
....
Tabii ki, istediğiniz bitiş noktasını bu belirli ciltleme ile eşlemelisiniz.
receiveTimeout oturumu tabanlı bağlamaları için tembellik sunucu tarafının idare eder belirlenmiş olmasına dayanmaktadır. Örneğin, sunucu bu ayarı temelHTTP bağlamaları için kullanmayacaktır. WCF için kendi sunucu tarafı işlem zaman aşımlarını yuvarlamanız gerekiyor
Visual Studio 2008'deki (veya doğru WCF öğelerini yüklediyseniz 2005) Araçlar menüsü altında 'WCF Hizmet Yapılandırma Düzenleyicisi' adı verilen bir seçenek vardır.
Buradan hem istemci hem de hizmetler için bağlama seçeneklerini değiştirebilirsiniz, bu seçeneklerden biri zaman aşımları için olacaktır.
Farklı zaman aşımları farklı şeyler ifade eder. İstemci üzerinde çalışırken .. muhtemelen daha çok SendTimeout'a bakıyorsunuz - bu referansı kontrol edin - harika ve alakalı açıklama: http://social.msdn.microsoft.com/Forums/tr-TR/wcf/thread / 84551e45-19a2-4d0d-bcc0-516a4041943d /
İki yol seçebilirsiniz:
1) İstemcideki kod ile
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) Web sunucusunda WebConfig tarafından
<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>
Daha fazla ayrıntı için resmi belgelere bakın
Bağlama zaman aşımlarına ek olarak ( Timespans cinsinden ) buna da ihtiyacınız olabilir. Bu saniyeler içinde.
<system.web>
<httpRuntime executionTimeout="600"/><!-- = 10 minutes -->