İçindeki bağlantı dizesini değiştirerek zaman aşımını artırabilir miyim web.config
?
İçindeki bağlantı dizesini değiştirerek zaman aşımını artırabilir miyim web.config
?
Yanıtlar:
Evet, ekler olabilir ;Connection Timeout=30
sizin için bağlantı dizesi ve istediğiniz değeri belirtin.
Connection Timeout
Özellik içinde ayarlanan zaman aşımı değeri , saniye cinsinden ifade edilen bir zamandır . Bu özellik ayarlanmazsa, bağlantının zaman aşımı değeri varsayılan değerdir (15 saniye).
Ayrıca, zaman aşımı değerini olarak ayarlayarak, 0
bağlanma girişiminizin sonsuz bir süre bekleyeceğini belirtmiş olursunuz. Belgelerde açıklandığı gibi bu, bağlantı dizenizde ayarlamamanız gereken bir şeydir:
0 değeri sınır olmadığını gösterir ve bir ConnectionString'de kaçınılmalıdır çünkü bağlanma girişimi süresiz olarak beklemektedir.
Hmmm ...
Darin'in dediği gibi, daha yüksek bir bağlantı zaman aşımı değeri belirleyebilirsiniz, ancak sorunun gerçekten bu olduğundan şüpheliyim.
Bağlantı zaman aşımına uğradığınızda, bu genellikle aşağıdakilerden biriyle ilgili bir sorundur:
Ağ yapılandırması - web sunucunuz / geliştirici kutunuz ve SQL sunucusu arasındaki yavaş bağlantı. Zaman aşımını artırmak bunu düzeltebilir, ancak altta yatan sorunu araştırmak akıllıca olacaktır.
Bağlantı dizisi. Yanlış bir kullanıcı adı / şifrenin bir nedenle "erişim reddedildi" şeklinde gerçek bir hata yerine zaman aşımı hatası vermesine neden olan sorunlar gördüm. Bu olmamalı ama hayat böyle.
Bağlantı Dizesi 2: Sunucunun adını yanlış veya eksik (örneğin mysqlserver
yerine mysqlserver.webdomain.com
) belirliyorsanız, bir zaman aşımı alırsınız. Sunucu adını tam olarak komut satırındaki bağlantı dizesinde belirtildiği şekilde kullanarak sunucuya ping atabilir misiniz ?
Bağlantı dizesi 3: Sunucu adı DNS'nizde (veya ana bilgisayar dosyanızda), ancak yanlış veya erişilemez bir IP'yi gösteriyorsa, makine bulunamadı-ish hatası yerine bir zaman aşımı alırsınız.
Aradığınız sorgu zaman aşımına uğruyor. Sorun sunucuya bağlantı gibi görünebilir, ancak uygulamanızın nasıl yapılandırıldığına bağlı olarak, zaman aşımı gerçekleşmeden önce sorgunuzun yürütüldüğü aşamaya kadar tüm yolu yapıyor olabilirsiniz.
Bağlantı sızıntıları. Kaç işlem çalışıyor? Kaç açık bağlantı var? Ham ADO.NET'in bağlantı havuzu oluşturup oluşturmadığından, gerekli olduğunda bağlantıları otomatik olarak kapattığından veya tüm bunların nerede yapılandırıldığından emin değilim. Bu muhtemelen kırmızı ringa balığı. WCF ve web hizmetleriyle çalışırken, kapatılmamış bağlantılarla ilgili zaman aşımlarına ve diğer öngörülemeyen davranışlara neden olan sorunlar yaşadım.
Denenecek şeyler:
SQL Management Studio ile sunucuya bağlanırken zaman aşımı oluyor mu? Öyleyse, sorun büyük olasılıkla ağ yapılandırmasıdır. Management Studio ile bağlanırken bir sorun görmüyorsanız, sorun sunucudaki değil uygulamanızda olacaktır.
SQL Profiler'ı çalıştırın ve kabloda gerçekte neler olduğunu görün. Gerçekten bağlanıp bağlanmadığınızı veya sorunun bir sorgu olup olmadığını anlayabilmelisiniz.
Sorgunuzu Management Studio'da çalıştırın ve ne kadar sürdüğünü görün.
İyi şanslar!
Dinamik olarak değiştirmek istiyorsanız, SqlConnectionStringBuilder kullanmayı tercih ederim .
ConnectionString'i yani bir dizeyi Object sınıfına dönüştürmenize izin verir, Tüm bağlantı dizesi özellikleri onun Üyesi olacaktır.
Bu durumda gerçek avantaj, ConnectionTimeout dizesi parçası bağlantı dizesinde zaten mevcut olup olmadığı konusunda endişelenmenize gerek olmamasıdır.
Ayrıca bir Nesne oluşturduğundan ve dizeyi değiştirmek yerine nesneye değer atamak her zaman iyidir.
İşte kod örneği:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
Mülkün SqlConnection
salt okunur tipte yapılmasının iyi bir fikir olduğuna inanamıyorum .