Kod içinden hangi web sunucusunun kullanıldığını belirleme

Bir ASP.NET web uygulamasının Visual Studio veya IIS'de Cassini web sunucusunda çalışıp çalışmadığını öğrenmek pragmatik olarak mümkün mü?

Arka plan ve sorma nedeni:

Oldukça az sayıda uygulamada, bir giriş sayfasındaki normal giriş ayarlarını makine adını kontrol ederek veya Client IP'nin localhost olup olmadığını kontrol ederek atlıyoruz. (127.0.0.1 veya ::: 1) böylece test bilgisayarlarımızda hata ayıklama yaparken uygulamanın farklı şekilde davrandığını ve test edebildiğimizi söyleyebiliriz.

Makine adı yaklaşımı tamam, ancak yeni bir Dev PC aldığımızda çişi değiştirmemiz gerekiyor. Bunun çok sık olmadığının farkındayım ama özensiz hissediyor. Ayrıca, üzerinde çalışan birkaç geliştirici ile tüm makinelerimizi "if" ifadesinde listelememiz gerekiyor.

"Localhost" yaklaşımıyla ilgili olarak, bundan hoşlanmıyorum. Başka bir saldırı yüzeyi eklemek gibi görünüyor. Web sunucularından birine geçip yerel olarak çalıştırıp bir şeyler görmekten endişeleniyorum.

Bu yüzden, web sitesinin Visual Studio'dan Cassini web sunucusu ile çalıştığını algılamak için koddan bir yol olup olmadığını merak ediyorum.

2
katma yazar codingbadger, kaynak
Bu farklı - hata ayıklama modunda çalıştırılıp çalıştırılmadığını nasıl söyleyeceğini soruyor. Sürüm modunda Visual Studio'da olabildiğince kolay olabilirim.
katma yazar David, kaynak
Teşekkürler, ama bu soru için değil. IP adresini kontrol etmekten daha temiz bir kod ama yine de aynı endişe var. Yine de iyi bir düşünce.
katma yazar David, kaynak

2 cevap

IIS altında çalışırken, ServerVariables koleksiyonunun SERVER_SOFTWARE özelliği Microsoft-IIS/7.5 gibi bir şey bildirir.

Ne yazık ki bu, Cassini altında çalışırken boş görünüyor.

Güvenlik konusunda endişe duyuyorsanız, bu size yardımcı olacaktır eğer istenen davranışa ters yol gibi görünüyor.

yorumlardan:

System.Diagnostics.Process.GetCurrentProcess() denetleyin. ProcessName Cassini için "WebDev.WebServer40" ve IIS için "w3wp"

string processName= System.Diagnostics.Process.GetCurrentProcess().ProcessName;
if (processName == "WebDev.WebServer40")
{
  //testing
  //Insert code that you want to happen if this is running in Visual Studio
}

Bu, IIS'de çalışıyorsa, pName değişkeni “w3wp” olacaktır. Visual Studio'da bir .NET 4.0 uygulamasında, “WebDev.WebServer40”. (Kontrol etmedim ama bunun ASP.NET 2.0 için WebDev.WebServer20 olacağını varsayalım)

2
katma
Çok fazla güvenlik yok. Bunu gerçekten hassas bilgilerle kullanmıyoruz. Bunların başına gelebilecek en kötü şey, bir Mağaza Lideri bir Bölge Lideri için kullanılan bilgileri görecektir. Finansal yok ve performans/İK şeyler yok. Başka bir sistemden (OpenId benzeri) geçirilen bir kullanıcı kimliğini kullandığımız iç sitelerde ve web sitesinin belirli bir kullanıcının nasıl görüneceğini görmek için atlamak istiyoruz. Bu aslında mükemmel. Ben bunu deneyeceğim.
katma yazar David, kaynak
Kahretsin. Çalışmadı. Varsayıyorum, çünkü bunu yayınlamak için IIS'yi yapılandırdık. Yine de teşekkürler!
katma yazar David, kaynak
Buldum! Cevabınız beni doğru yola yönlendirecek kadar yakındı. System.Diagnostics.Process.GetCurrentProcess() 'i kontrol ettim. ProcessName Cassini için "WebDev.WebServer40" ve IIS için "w3wp" Cevap vericinin aradığım kişi olmasa da, beni doğru yola yönlendirdin. eğer sizinkini değiştirmek istiyorsanız, bunu kabul edeceğim ki onu anlamaya çalışan bir sonraki kişi bulabilir.
katma yazar David, kaynak
Evet, sadece kendi sorularıma cevap vermekten nefret ediyorum, özellikle de başkaları denemek için zaman ayırdığında.
katma yazar David, kaynak
Şerefe David, teşekkürler!
katma yazar starskythehutch, kaynak
@David Cevap güncellenmediyse, sadece kendinize cevap verin ve doğru olarak işaretleyin. Bunu saklanmak için çok güzel bir kod parçası olarak buldum.
katma yazar rick schott, kaynak

Yapı sembolleri kullanamaz mısınız? Oluşturma sembolünüzü kurun ve ardından #IF PROD yapın ve ardından kimlik doğrulamasını çalıştırın. Yani hata ayıklama modundayken, kimlik doğrulamayı tamamen atlar. Umarım yardımcı olur!

0
katma