Visual Studio ile SVG ve web testi için IIS nasıl yapılandırılır?


14

Diyelim ki içinde svg resmi olan basit bir web sayfam var:

<img src="foobar.svg" alt="not working" />

Bu sayfayı statik html sayfası olarak yapar ve doğrudan görüntülersem svg görüntülenir. Bu svg'nin adresini yazarsam - görüntülenir.

Ancak bunu .aspx sayfası olarak yaptığımda ve Visual Studio'dan dinamik olarak başlattığımda altmetin alıyorum . Bu svg'nin adresini yazarsam (yerel dosya olarak değil, localhost'tan) - tarayıcı görüntülemek yerine indirmeye çalışır.

IIS'de mime türünü zaten tanımladım (tüm sunucu için - "image / svg + xml") ve IIS'yi yeniden başlattım. Önceki ile aynı etki.

Soru: Daha ne yapmalıyım?

Güncelleme

WireShark çalışmaz (belgelerde), RawCap'ı da denedim, ancak bağlantımı (tek) izleyemiyorum, Neyse ki Fiddler çalıştı:

Müşteriden:

GET http://127.0.0.1:1731/svg/document_edit.svg HTTP/1.1
Host: 127.0.0.1:1731
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:10.0.1) Gecko/20100101 Firefox/10.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive

Sunucudan cevap:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 16 Feb 2012 11:14:38 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: application/octet-stream
Content-Length: 87924
Connection: Close

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:

*** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***

Kayıt için, Fiddler için faydalı soru cevap: /programming/826134/how-to-display-localhost-traffic-in-fiddler-while-debugging-an-asp-net-applicati


Bunun için SO'da daha iyi yanıtlar alabileceğinizi düşünün. Kısacası, ASPX'in zaten çalıştığını varsayarsak, tarayıcının bir SVG dosyası olduğuna inanması için ASPG sayfasından MIME türü olarak SVG yayınlamanız gerekir. Muhtemelen SVG'yi sayfadan dinamik olarak yaymaya mı çalışıyorsunuz? Öyleyse, AFAIK tek bir sayfa olarak çalışırsa, bir IMG girişinde çalışır.
TristanK

@TristanK, aspx "MIME türü olarak SVG" yaymıyor, sadece <img src...yukarıda gösterildiği gibi içeriyor , aspx tam html sayfasına "çevriliyor", ancak tüm içeriği (html ve sonra svg) göndermek IIS tarafından yapılıyor.
greenoldman

Hala ne anlattığınızı anlamıyorum, ancak bunun bir geliştirme sorusu olduğunu düşünüyorum, bu yüzden StackOverflow'da daha iyi sorulur.
TristanK

2
Fiddler'in bir kopyasını alın ve iki farklı isteği takip edin. Bu, bu vakaların her birinde görüntü için doğrudan bir isteğin neden farklı davrandığına dair bazı ipuçları verebilir. İpuçları büyük olasılıkla döndürülen başlıklarda olacaktır. Bu veriler olmadan yapabileceğimiz tek şey sunucunuzun hangi yanıtları döndürdüğünü tahmin etmektir.
Kev

@macias Kev'nın dediği gibi, trafiği izlemeniz gerekecek. Kemancı veya sade eski Wireshark onu alabilmelidir.
Chris S

Yanıtlar:


14

Fiddler izlemenizden, sayfalarınıza yerleşik Visual Studio web sunucusunu kullanarak hizmet verdiğiniz görülüyor:

Server: ASP.NET Development Server/10.0.0.0

Bu IIS7 tarafından sunuluyor olsaydı şunu görürdük:

Server: Microsoft-IIS/7.5

Yerleşik Visual Studio web sunucusunda yalnızca sunabileceği sınırlı sayıda mime türü vardır ve IIS7 için ayarladığınız mime türleri hakkında bilgisi yoktur. Bir süre önce Stack Overflow benzer bir soruna bir cevap yazdım:

ASP.NET Geliştirme Sunucusunu kullanarak MIME türlerini ayarlama

Yerleşik sunucu .svgdosyanızı şu şekilde sunar:

Content-Type: application/octet-stream

Muhtemelen tarayıcının indirilmesini istemesine neden olan şey budur.

Visual Studio'da, sitenizin proje özelliklerini açıp dikey sekme listesinden "Web" sekmesini seçerek IIS Express'i kullandığınızdan emin olun:

resim açıklamasını buraya girin

IIS 7.5 Express yüklü değilse buradan alabilirsiniz:

http://www.microsoft.com/download/en/details.aspx?id=1038

Tam olarak yararlanmak için Visual Studio 2010 Service Pack 1'e ihtiyacınız olacak:

http://support.microsoft.com/kb/983509

IIS Express desteği

Visual Studio 2010 SP1, Internet Information Services (IIS) 7.5 Express'i web sitesi ve Web Uygulaması Projeleri için yerel barındırma sunucusu olarak kullanmanızı sağlar.

Not IIS 7.5 Express SP1'de bulunmaz ve ayrı olarak indirmeniz gerekir. Daha fazla bilgi için aşağıdaki blogu ziyaret edin: http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

Bunu yaptıktan sonra .svgmime türünü uygulamanızın web.configdosyasına ekleyebilirsiniz :

<configuration>
   <system.webServer>
      <staticContent>
         <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      </staticContent>
   </system.webServer>
</configuration>

Çok teşekkürler. Benim durumumda biraz farklı gitti - IIS'ye geçmek için (ISS, ISSExpress değil) Yönetici modunda VS'yi çalıştırmak zorunda kaldım, bundan sonra - web.config içinde svg tanımlayamadım çünkü tanımladım zaten IIS'de.
greenoldman

2

Yukarıda belirtildiği gibi, Cassini web.config dosyasında bu ayarları yok sayar, bu yüzden birinin yerine IIS Express'i kullanması gerekir (VS proje ayarlarında) /programming/5924647/setting-mime-types-using-the-asp- net-geliştirme-sunucu

Yönetici kullanıcı arabirimini kullanarak veya IIS veya IIS Express için web.config kullanarak MIME türlerini yapılandırma hakkında daha fazla bilgi için bkz: http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4- bir web sitesi için veya genel olarak / ve http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-to-web-config-in-iis-7 /


Bunu yeni bir soru olarak mı yoksa retorik olarak mı soruyorsunuz? Eğer eski ise, lütfen tüm detayları içeren yeni bir soru sorun . Eğer ikincisi, bu muhtemelen bir yorum olmalıdır - olduğu gibi çok kötü bir cevaptır ( neden için buraya bakın )
voretaq7

daha iyi bağlantılar ile revize edildi
George Birbilis

çok daha iyi :-)
voretaq7

2

Kev cevabını şu şekilde kullandım:

  1. IIS 8.0 Express'i Web Platformu Yükleyicisi'nden Yükleme
  2. IIS Express'i kullanmak için projenin özelliklerini değiştirme ve bunun için Sanal Dizin oluşturma
  3. Web.config yapılandırmasına ekleme → system.webServer
<staticContent>
    <remove fileExtension=".svg" />
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

2

Bunun için geçici çözüm, svg için içerik türünün üzerine yazılan kendi httphandler'ımı yerel olarak oluşturmaktı.

public class SvgHandler : IHttpHandler
{

    public bool IsReusable
    {
        get { return false; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "image/svg+xml";
        context.Response.BinaryWrite(File.ReadAllBytes(context.Request.PhysicalPath));
        context.Response.End();
    }
}

ve web.config içinde ekledim:

<httpHandlers>
  <add verb="*" path="*.svg" type="SvgHandler" />
</httpHandlers>

Bu çözümle IIS express'i kullanmak zorunda değilsiniz, visual studio 2010'daki normal geliştirme sunucusunu kullanabilirsiniz.


1
Bu tür şeylerin olması çok iğrenç ...
Jarrod Mosen

1

IIS7 çalıştırıyorum ve IIS'de sunucuyu sağ tıklatıp özellikleri seçerek bu sorunu çözebildim. Sonra MIME Türleri ... düğmesine tıkladım. Sonra Yeni'yi tıkladım. Uzantı için .svg yazdım. MIME Tipi için image / svg + xml yazdım. Sonra kaydedilmiş tüm ve komut isteminden bir iisreset yaptım. Harika çalıştı.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.