2012-03-02 26 views
23

altında çalışıp çalışmadığını program aracılığıyla belirleme Bunun mümkün olduğundan emin değilim, ancak şu anda çalıştırılan kodun IIS Express altında çalışıp çalışmadığını belirlemek için bir ipucu bekliyorum. inanılmaz hackish ve kesinlikle bir noktada/mola başarısız olur şimdiye kadar benim en iyi yaklaşım,:Kodun IIS Express

bool IsExpress = 
    Request.ServerVariables["SERVER_SOFTWARE"] == "Microsoft-IIS/7.5" 
    && Int32.Parse(Request.ServerVariables["INSTANCE_ID"]) > 1000000000; 

Kesinlikle orada vardır daha iyi bir yolu olmalı. Uygulama, Sunucu ve İstek nesnelerinin incelenmesi, daha iyi bir anlayış sağlayabilecek herhangi bir şey ortaya koymadı. Belki başka bir nesneye bakmam gerek?

Güncelleme:

Bunu algılamak için bir yol olup olmadığını gerçekten merak ediyorum - ben bir yakma yok bu noktada gerçekten akademik olduğunu kullanmak gerekir. Asıl soru duruyor. Ancak yorumlara cevap verme ruhu içinde, özellikle bu sitedeki başka bir soru/cevaptan gelen bir eleştiriyi yanıtlamakla ilgileniyorum: How to search the server's MIME map. Eleştiri, yayınlanan yanıtın yalnızca geleneksel IIS örnekleri olan IIS Express için çalışmadığı yönündedir. IIS Express, applicationhost.config XML dosyasındaki MIME yapılandırmasını depolar ve bu yanıtı IIS Express için de döndürmek için bir yol sağlamak üzere bu güncelleştirmeyi güncelleştirmek isterim. XML'den uygun değeri (LINQ'den XML'e!) Yakalayan bir kod ekleyebilirim, ancak bunu daha akıllı yapmak isterim. Açık olmak gerekirse, bu dosyayı ayrıştırma konusunda yardıma ihtiyacım yok - kodun şu anda IIS Express altyapısında çalışıp çalışmadığını tespit etmeye çalışırken daha zarif bir şey.

Güncelleme 2:

8.0 Express Beta IIS released this week oldu ve daha da benim söz konusu yaklaşım kırılgandır ve kıracak olduğunu göstermek için gider. Belirli bir sürümü hedeflemek için bir anlaşma kırıcı olmasa da, bunu hesaba katmak ve kodun en azından bilinen sürümlerle bugün çalışacağından emin olmak isteriz.

+0

Amacınız nedir? Bunu neden anlamak istersiniz (belki de hedefinize ulaşmak için başka bir yol var)? – Yahia

+5

IIS Express'te çalışıyorsa, farklı işlemek için ne istiyorsunuz? Belki de, IIS Express'i nasıl algılamak yerine, sormanız gereken soru budur. Örneğin, "hata ayıklamasında çalışırken _____ yerine _____ nasıl yaparım?" –

+0

Bazı yapılandırma öğelerini incelemek için etrafa odaklanır - DirectoryExntry ("IIS:/localhost/W3SVC /") kullanarak IIS Express'i kontrol eden applicationhost.config dosyasında XML ayrıştırılır. – Goyuix

cevap

24

Geçerli işlem adını kontrol etmek hile yapar mı?

bool isExpress = 
    String.Compare(Process.GetCurrentProcess().ProcessName,"iisexpress") == 0; 

Normal IIS bellekten w3wp.exe altında çalışır.

+1

IIS 7.5 için 'w3wp' - ancak IIS'nin farklı sürümlerinden emin değilim. Ben eski sürümleri için farklı bir şey olduğunu biliyorum ... – debracey

+1

@debracey evet eski sürümleri için 'aspnet_wp.exe' olacak. – Strelok

+0

Bu yaklaşımla karşılaştığım tek sorun, System.Diagnostics.Process sınıfının Tam Güven gerektirdiğidir. Aksi halde cazibe gibi çalışıyor gibi görünüyor. – Goyuix

2

COM düzey API'leri içine bırakarak sakıncası yoksa, IIS Sürüm Yöneticisi API

kullanabilirsiniz http://msdn.microsoft.com/en-us/library/gg418429.aspx

bu SO Post nasıl kullanıldığını hakkında bazı tartışmalar vardır

: Starting and stopping IIS Express programmatically - - Tam olarak ne istediğinizi değil, API'yi kullanarak tartışıyorlar.

Düzenleme: Bunu denemediğimi eklemeliyim ama umut verici, iyi şanslar!

+0

Bu API'yi inceledim ancak iki rezervasyonum vardı: Bir tanesi "doğrudan kodunuzdan kullanılması amaçlanmadı" olarak işaretlendi - anlaşma kırıcı değil, aynı zamanda teşvik edici de değil. İkincisi, o anda yürürlükte olan kodu, API'den döndürülen bir örneğe nasıl bağlayacağınızdan (hatta yapabilmenizden) emin değilim. Belki de URL'leri veya bir şeyleri eşleştirerek. – Goyuix

+0

Ne aldığınızdan emin değilsiniz - ama ne yapacağımı, uygulama havuzunu başlattığında IIS sürümünü kodunuza (kendi yönetilen 'enum 'belki de) çekin, sonra bunu yalnızca statik bir değişkende saklayın - - Her zaman COM API'sini sorgulamadan çıkma. Sunucu türü, uygulamanızı yeniden başlatmaya gerek kalmadan açıkça değişemez. – debracey

+0

IISVersionManager sınıfını yenersem, makinede kullanılabilen IIS örneklerinin listesini alabilirim ancak IISVersion arabiriminin IIS örneğinin içinde yürüten kodla eşleştirmesinin bir yolu yoktur. Bu COM API'sinin, şu anda çalıştırmakta olan kodun IIS Express'te olup olmadığını bilmemesini ve gerçekten de bu IIS Express'in kullanılabilir olmadığını bilmiyorum. Belki bir kod örneği önerdiğin şeyi açıklığa kavuşturmaya yardımcı olur mu? – Goyuix

2

Bir veya daha fazla limitation of IIS Express'un çalışıp çalışmadığını göremiyor olabiliriz, eğer çalışıyorsa, IIS Express değildir. Örnek IIS Express, sharepoint hizmetlerini desteklemiyor

+0

Güvenilir bir şekilde test edebileceğinizi düşündüğünüz belirli (veya başka) sınırlamalardan hangilerini paylaşabilir misiniz? – Goyuix

+0

bir çeşit sorgu, ortam değişkenleri% IISBin% iyi bir ipucu olur mu? veya sorgu paylaşım noktası hizmeti ve sonuç desteklenmeyen bir istisna olsaydı, biz biliyoruz IIS Express –

+0

% IIS_BIN% için Test çalışabilir, bu yalnızca IIS Express bu değişkeni ayarlar gibi görünüyor. EnvironmentPermission sınıfının bu değişkenlere erişimi reddetmek üzere ayarlanabildiği tek gettab'dır. "Paylaşım noktası hizmeti için sorgu" ile ne demek istediğimi hiçbir fikrim yok - SharePoint, IIS'ye yerel bir şey yüklemeyebileceğiniz bir ürün. – Goyuix