Visual Studio를 사용하여 SVG 및 웹 테스트를 위해 IIS를 구성하는 방법은 무엇입니까?


14

svg 이미지가있는 간단한 웹 페이지가 있다고 가정 해 봅시다.

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

이 페이지를 정적 html 페이지로 만들고 직접 보면 svg가 표시됩니다. 이 svg의 주소를 입력하면 표시됩니다.

그러나 이것을 .aspx 페이지로 만들고 Visual Studio에서 동적으로 시작하면 alt텍스트가 나타납니다. 로컬 파일이 아닌 localhost 에서이 svg의 주소를 입력하면 브라우저가 표시하지 않고 다운로드하려고합니다.

IIS에서 이미 mime 유형을 정의하고 ( "image / svg + xml"전체 IIS) 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에 유용한 Q & A가 있습니다 : /programming/826134/how-to-display-localhost-traffic-in-fiddler-while-debugging-an-asp-net-applicati


SO에 대한 더 나은 답변을 얻을 수 있다고 생각하십시오. 간단히 말해서 ASPX가 이미 작동하고 있다고 가정하면 브라우저가 SVG 파일이라고 믿기 위해 ASPX 페이지에서 SVG를 MIME 유형으로 내 보내야합니다. 아마도 페이지에서 SVG를 동적으로 방출하려고합니까? 그렇다면 AFAIK가 단일 페이지로 작동하면 IMG 항목에서 작동합니다.
TristanK

@TristanK, aspx는 "SVG를 MIME 형식으로"내 보내지 않습니다. <img src...위와 같이 간단히 aspx가 전체 html 페이지로 "번역되어"있지만 전체 내용 (html 및 svg) 전송은 IIS에서 수행됩니다.
greenoldman

나는 아직도 당신이 무엇을 묘사하고 있는지 이해하지 못하지만 이것이 개발 질문이라고 생각하므로 StackOverflow에서 더 나은 방법을 묻는 것이 좋습니다.
TristanK

2
의 사본을 잡아 피들러는 다음 두 가지 요청을 추적. 이미지에 대한 직접 요청이 각각의 경우에 다르게 동작하는 이유에 대한 힌트를 얻을 수 있습니다. 단서는 반환 된 헤더에있을 가능성이 높습니다. 이 데이터가 없으면 서버가 어떤 응답을 반환하는지 추측 할 수 있습니다.
Kev

@macias Kev가 말했듯이 트래픽을 추적해야합니다. 피들러 나 평범한 오래된 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 유형 만 있으며 IIS7에 설정 한 MIME 유형에 대한 지식이 없습니다. 나는 스택 오버플로에서 비슷한 문제에 대한 답변을 잠시 전에 썼다.

ASP.NET 개발 서버를 사용하여 MIME 유형 설정

내장 서버는 다음 .svg과 같이 파일을 제공합니다 .

Content-Type: application/octet-stream

브라우저가 다운로드하라는 메시지를 표시하는 원인 일 수 있습니다.

Visual Studio에서 사이트의 프로젝트 속성을 열고 세로 탭 목록에서 "웹"탭을 선택하여 IIS Express를 사용하고 있는지 확인하십시오.

여기에 이미지 설명을 입력하십시오

IIS 7.5 Express가 설치되어 있지 않은 경우 여기에서 얻을 수 있습니다.

http://www.microsoft.com/download/en/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응용 프로그램 web.config파일에 MIME 유형을 추가 할 수 있습니다 .

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

많은 감사합니다. 필자의 경우 IIS로 전환하기 위해 (ISSExpress가 아닌 ISS가 있음) 관리자 모드에서 VS를 실행해야했습니다. 결국 web.config에서 svg를 정의하지 않았습니다. 이미 IIS에 있습니다.
greenoldman

2

위에서 언급했듯이 Cassini는 web.config에서 이러한 설정을 무시하므로 대신 VS 프로젝트 설정에서 IIS Express를 사용해야합니다. https : //.com/questions/5924647/setting-mime-types-using-the-asp- 인터넷 개발 서버

관리 UI를 사용하거나 IIS 또는 IIS Express 용 web.config를 사용하여 MIME 유형을 구성하는 방법에 대한 자세한 내용을 보려면 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

더 나은 링크 수정
조지 Birbilis

훨씬 더 나은 :-)
voretaq7

2

나는 Kev 답변을 다음과 같이 사용했습니다.

  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

이 문제에 대한 해결 방법은 svg의 콘텐츠 유형을 덮어 쓴 자체 httphandler를 로컬로 만드는 것입니다.

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를 사용할 필요가 없으며 Visual Studio 2010에서 일반 개발 서버를 사용할 수 있습니다.


1
이런 종류의 일이 일어난 것은 꽤나 심한 일입니다 ...
Jarrod Mosen

1

IIS7을 실행 중이며 IIS에서 서버를 마우스 오른쪽 단추로 클릭하고 속성을 선택하여이 문제를 해결할 수있었습니다. 그런 다음 MIME 유형 ... 버튼을 클릭했습니다. 그런 다음 새로 만들기를 클릭했습니다. 확장 프로그램의 경우 .svg를 입력했습니다. MIME 유형의 경우 image / svg + xml로 입력했습니다. 그런 다음 모두 저장하고 명령 프롬프트에서 iisreset을 수행했습니다. 잘 했어.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.