14 votes

Comment configurer IIS pour les tests SVG et web avec Visual Studio ?

Disons que j'ai une page web simple contenant une image svg :

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

Si je fais de cette page une page html statique et que je la consulte directement, le svg s'affiche. Si je tape l'adresse de ce svg, il s'affiche.

Mais lorsque je crée une page .aspx et que je la lance dynamiquement depuis Visual Studio, j'obtiens les résultats suivants alt texte. Si je tape l'adresse de ce svg (depuis l'hôte local, pas en tant que fichier local), le navigateur essaie de le télécharger au lieu de l'afficher.

J'ai déjà défini le type mime dans IIS (pour l'ensemble du serveur -- "image/svg+xml") et redémarré IIS. Même effet qu'avant.

Question : que dois-je faire de plus ?

Mise à jour

WireShark ne fonctionne pas (c'est dans la documentation), j'ai essayé aussi RawCap, mais il ne peut pas tracer ma connexion (bizarre), heureusement Fiddler a fonctionné :

Du client :

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

Réponse du serveur :

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. ***

Pour mémoire, voici des questions-réponses utiles pour Fiddler : https://stackoverflow.com/questions/826134/how-to-display-localhost-traffic-in-fiddler-while-debugging-an-asp-net-applicati

0 votes

Je pense que vous obtiendrez de meilleures réponses sur SO. En bref, en supposant qu'ASPX fonctionne déjà, il faudrait que vous émettiez SVG comme type MIME de la page ASPX pour que le navigateur croie qu'il s'agit d'un fichier SVG. Vous essayez, vraisemblablement, d'émettre dynamiquement SVG à partir de la page ? Si c'est le cas, AFAIK, si cela fonctionne en tant que page unique, cela fonctionnera dans une entrée IMG.

0 votes

@TristanK, l'aspx n'émet pas "SVG comme type MIME", il contient simplement <img src... comme indiqué ci-dessus, aspx est "traduit" en page html complète, mais l'envoi du contenu entier (html, puis svg) est fait par IIS.

0 votes

Je ne comprends toujours pas ce que vous décrivez, mais je pense qu'il s'agit d'une question de développement, qu'il serait préférable de poser sur StackOverflow.

14voto

Reto Meier Points 55904

D'après votre trace Fiddler, il semble que vous serviez vos pages en utilisant le serveur web intégré de Visual Studio :

Server: ASP.NET Development Server/10.0.0.0

Si le service était assuré par IIS7, nous verrions :

Server: Microsoft-IIS/7.5

Le serveur web intégré de Visual Studio n'a qu'un ensemble limité de types de mime qu'il peut servir et n'a aucune connaissance des types de mime que vous avez définis pour IIS7. J'ai écrit une réponse à un problème similaire sur Stack Overflow il y a quelque temps :

Définition des types MIME à l'aide du serveur de développement ASP.NET

Le serveur intégré sert votre .svg en tant que fichier :

Content-Type: application/octet-stream

C'est probablement la raison pour laquelle le navigateur demande le téléchargement.

Dans Visual Studio, vérifiez que vous utilisez IIS Express en ouvrant les propriétés du projet de votre site et en sélectionnant l'onglet "Web" dans la liste verticale des onglets :

enter image description here

Si vous n'avez pas installé IIS 7.5 Express, vous pouvez l'obtenir ici :

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

Vous aurez besoin de Visual Studio 2010 Service Pack 1 pour en profiter pleinement :

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

Support d'IIS Express

Visual Studio 2010 SP1 vous permet d'utiliser l'Internet Information Services (IIS) 7.5 Express comme serveur d'hébergement local pour le site web. et les projets d'application Web.

Note IIS 7.5 Express n'est pas inclus dans SP1, et vous devez le télécharger séparément. Pour plus d'informations, visitez le blog suivant : http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

Une fois que vous avez fait cela, vous pouvez ajouter l'élément .svg au type mime de votre application web.config fichier :

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

0 votes

Merci beaucoup. Dans mon cas, cela s'est passé un peu différemment - pour passer à IIS (j'ai ISS, pas ISSExpress), j'ai dû lancer VS en mode administrateur, après cela c'était tout - je n'ai pas défini svg dans web.config parce que je l'avais déjà défini dans IIS.

2voto

George Birbilis Points 21

Comme mentionné ci-dessus, Cassini ignore ces paramètres dans web.config et il faut donc utiliser IIS Express à la place (dans les paramètres du projet VS). https://stackoverflow.com/questions/5924647/setting-mime-types-using-the-asp-net-development-server

Pour plus d'informations sur la manière de configurer les types MIME à l'aide de l'interface d'administration ou de web.config pour IIS ou IIS Express, voir : http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-in-iis-for-a-website-or-global/ y http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-to-web-config-in-iis-7/

0 votes

Est-ce que vous posez cette question comme une nouvelle question, ou pour la forme ? Dans le premier cas, veuillez poser une nouvelle question avec tous les détails. Si c'est le cas, cela devrait probablement être un commentaire - en l'état, c'est une réponse très pauvre ( voir ici pour savoir pourquoi )

0 votes

Révisé avec de meilleurs liens

0 votes

Beaucoup mieux :-)

2voto

Luke Points 394

J'ai utilisé la réponse de Kev, par :

  1. Installation de IIS 8.0 Express à partir de Installateur de plate-forme Web
  2. Changement des propriétés du projet pour utiliser IIS Express et créer un répertoire virtuel pour celui-ci
  3. Ajout dans les web.config configuration system.webServer

    <staticContent> <remove fileExtension=".svg" /> <mimeMap fileExtension=".svg" mimeType="image/svg+xml" /> </staticContent>

2voto

Aceplante Points 804

Pour contourner ce problème, j'ai créé localement mon propre httphandler qui a écrasé le content-type pour svg.

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();
    }
}

et dans web.config j'ai ajouté :

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

Avec cette solution, vous n'avez pas besoin d'utiliser IIS express, vous pouvez simplement utiliser le serveur de développement normal dans Visual Studio 2010.

1 votes

C'est assez dégoûtant que ce genre de chose doive arriver...

1voto

Ivaylo Petrov Points 146

J'utilise IIS7 et j'ai pu résoudre ce problème en faisant un clic droit sur le serveur dans IIS et en choisissant Propriétés. J'ai ensuite cliqué sur le bouton MIME Types.... J'ai ensuite cliqué sur Nouveau. Pour l'extension, j'ai tapé .svg. Pour le type MIME, j'ai tapé image/svg+xml. J'ai ensuite sauvegardé le tout et fait une réinitialisation de l'interface de commande. Cela a bien fonctionné.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X