Як налаштувати IIS для SVG та веб-тестування за допомогою Visual Studio?


14

Скажімо, у мене проста веб-сторінка із зображенням svg:

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

Якщо я зробити цю сторінку статичною HTML-сторінкою і переглядати її безпосередньо, відображається svg. Якщо я введу адресу цього svg - він відображається.

Але коли я роблю це як .aspx сторінку та динамічно запускаю її з Visual Studio, я отримую altтекст. Якщо я введіть адресу цього svg (з localhost, а не як локальний файл) - браузер намагається завантажити його замість відображення.

Я вже визначив тип mime в IIS (для всього сервера - "image / svg + xml") і перезапустив IIS. Такий же ефект, як і раніше.

Питання: що мені робити більше?

Оновлення

WireShark не працюватиме (він є в документації), я спробував також RawCap, але він не може простежити моє з'єднання (непарне), на щастя, Fiddler працював:

Від клієнта:

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

Відповідь із сервера:

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

Для запису тут корисні запитання та відповіді для Fiddler: /programming/826134/how-to-display-localhost-traffic-in-fiddler-time-debugging-an-asp-net-applicati


Подумайте, ви можете отримати кращі відповіді на це на ТАК. Коротше кажучи, якщо припустити, що ASPX вже працює, вам потрібно буде випустити SVG як тип MIME зі сторінки ASPX, щоб браузер повірив, що це файл SVG. Ви, мабуть, намагаєтесь динамічно випромінювати SVG зі сторінки? Якщо так, AFAIK, якщо він працює як одна сторінка, він буде працювати у записі IMG.
TristanK

@TristanK, aspx не випускає "SVG як тип MIME", він просто містить, <img src...як показано вище, aspx "переводиться" на повну сторінку html, але надсилання всього вмісту (html, а потім svg) здійснює IIS.
greenoldman

Я досі не розумію, що ви описуєте, але я думаю, що це питання розробки, тому краще ставити питання на StackOverflow.
TristanK

2
Візьміть копію Fiddler, а потім простежте два різні запити. Це може дати вам декілька підказок щодо того, чому прямий запит на зображення поводиться по-різному у кожному з цих випадків. Підказки, швидше за все, будуть у повернених заголовках. Без цих даних все, що ми можемо зробити, - це лише здогадатися, які відповіді повертається ваш сервер.
Кев

@macias Як сказав Кев, вам потрібно буде простежити трафік. Fiddler або звичайний старий Wireshark повинен мати можливість його забрати.
Chris S

Відповіді:


14

З вашого сліду Fiddler видно, що ви обслуговуєте свої сторінки за допомогою вбудованого веб-сервера Visual Studio:

Server: ASP.NET Development Server/10.0.0.0

Якщо б це обслуговувалося IIS7, то ми побачимо:

Server: Microsoft-IIS/7.5

Вбудований веб-сервер Visual Studio має лише обмежений набір типів mime, який він може обслуговувати, і не знає типів mime, які ви встановили для IIS7. Відповідь на подібну проблему я написав на Stack Overflow на час назад:

Встановлення типів MIME за допомогою сервера розробки ASP.NET

Вбудований сервер обслуговує ваш .svgфайл у вигляді:

Content-Type: application/octet-stream

Це, мабуть, саме те, через що браузер вимагає завантаження.

У Visual Studio перевірте, що ви використовуєте IIS Express, відкривши властивості проекту свого веб-сайту та вибравши вкладку "Веб" зі списку вертикальних вкладок:

введіть тут опис зображення

Якщо у вас не встановлений IIS 7.5 Express, ви можете отримати його звідси:

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

Вам буде потрібно Visual Studio 2010 з пакетом оновлень 1 для повного використання переваг:

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

Підтримка IIS Express

Visual Studio 2010 SP1 дозволяє використовувати Інтернет Інформаційні послуги (IIS) 7.5 Express як локальний хостинг-сервер для веб-сайту та проектів веб-додатків.

Примітка IIS 7.5 Express не входить до SP1, і його потрібно завантажити окремо. Для отримання додаткової інформації відвідайте наступний блог: http://weblogs.asp.net/scottgu/archive/2011/01/03/vs-2010-sp1-beta-and-iis-developer-express.aspx

Закінчивши, ви можете додати .svgтип mime до web.configфайлу програми:

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

Велике дякую. У моєму випадку пішло дещо інакше - для переходу на IIS (у мене ISS, а не ISSExpress) мені довелося запустити VS в режимі адміністрування, після цього все було - я не визначав svg в web.config, тому що я визначив це вже в IIS.
greenoldman

2

Як було сказано вище, Кассіні ігнорує ці параметри в web.config, тому потрібно використовувати замість IIS Express (у налаштуваннях проекту VS) /programming/5924647/setting-mime-types-using-the-asp- net-server-сервер

Щоб отримати більше інформації про те, як налаштувати типи MIME за допомогою інтерфейсу адміністратора або за допомогою web.config для IIS або IIS Express, див. Http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4- in-iis-for-a-website-or-global / і http://4rapiddev.com/tips-and-tricks/add-mime-type-flv-mp4-to-web-config-in-iis-7 /


Ви ставите це як нове запитання чи риторично? Якщо перший, будь ласка, поставте нове запитання з усіма деталями. Якщо останнє, це, мабуть, буде коментарем - так як це стоїть, це дуже погана відповідь ( див. Тут для чого )
voretaq7

переглянуто з кращими посиланнями
Джордж Бірбіліс

набагато краще :-)
voretaq7

2

Я використав відповідь Кева:

  1. Встановлення IIS 8.0 Express з інсталятора веб-платформ
  2. Зміна властивостей проекту для використання IIS Express та створення віртуального каталогу для нього
  3. Додавання в конфігурацію web.config → system.webServer
<staticContent>
    <remove fileExtension=".svg" />
    <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
</staticContent>

2

Моїм вирішенням цього було створення мого власного httphandler на локальному рівні, який би замінив тип вмісту для 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();
    }
}

і в web.config я додав:

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

з цим рішенням вам не потрібно використовувати IIS express, ви можете просто використовувати звичайний сервер розробки у візуальній студії 2010


1
Досить грубо, що подібне має відбуватися ...
Jarrod Mosen

1

Я запускаю IIS7 і зміг це виправити, клацнувши правою кнопкою миші на сервері в IIS та обравши властивості. Потім я натиснув кнопку MIME Types .... Потім я натиснув Нове. Для розширення я набрав .svg. Для MIME типу I набрав image / svg + xml. Потім я зберегла це все і зробила iisreset з командного рядка. Працювали чудово.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.