2011-09-15 4 views
3

http://localhost:8080에 호스팅 된 WCF 서비스와 http://localhost:82에 웹 응용 프로그램이 있습니다. Windows 7 64 비트 및 IIS 7.5가 있습니다."405 Method Not Allowed"는 WCF 서비스를 호출 할 때 Firefox 6에서만 사용하지만 IE 9에서는 지원되지 않습니다.

웹 응용 프로그램의 페이지는 jQuery를 사용하여 WCF 서비스에 AJAX 요청을 작성합니다.

IE에서는 서비스 호출이 정상적으로 수행됩니다. Firefox에서는 405 Method Not Allowed 오류가 표시됩니다. 웹 응용 프로그램이 ASP.NET 코드 숨김에서 만드는 서비스 호출은 항상 성공합니다.

다른 개발자의 빌드에는 동일한 문제가 있습니다. 처음에는이 기사에 기반한 FF 3.5에 소개 된 교차 사이트 보안 제한 사항과 관련이 있다고 생각했습니다. https://developer.mozilla.org/En/HTTP_access_control. 그러나 필요한 모든 응답 헤더를 추가 한 후에도 문제가 발생했습니다.

aspnet_regiis.exe 명령과 WCF ServiceModelReg.exe 명령도 실행했습니다.

HTTP/1.1 405 Method Not Allowed 
Cache-Control: private 
Allow: POST 
Content-Length: 1565 
Content-Type: text/html; charset=UTF-8 
Server: Microsoft-IIS/7.5 
Set-Cookie: ASP.NET_SessionId=53pqdbqgtj2cfdvtqrikiewu; path=/; HttpOnly 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Access-Control-Allow-Origin: http://localhost:82 
Access-Control-Allow-Methods: POST, GET, OPTIONS 
Access-Control-Max-Age: 17280 
Access-Control-Allow-Headers: content-type 
Access-Control-Allow-Credentials: true 
Date: Thu, 15 Sep 2011 15:55:27 GMT 

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>Service</title> 
    </head> 
    <body> 
    <div id="content"> 
     <p class="heading1">Service</p> 
     <p>Method not allowed.</p> 
    </div> 
    </body> 
</html> 

어떤 아이디어 :

OPTIONS http://localhost:8080/ScoutService.svc/Contact_Add HTTP/1.1 
Host: localhost:8080 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0.2) Gecko/20100101 Firefox/6.0.2 
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 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection: keep-alive 
Origin: http://localhost:82 
Access-Control-Request-Method: POST 
Access-Control-Request-Headers: content-type 
Pragma: no-cache 
Cache-Control: no-cache 

을 여기 서버의 응답입니다 : 여기

파이어 폭스하게 요청은?

답변

2

Firefox는 POST 또는 GET 외에 OPTIONS 요청을 보냅니다.

수정 방법은 http://forums.iis.net/t/1160649.aspx을 참조하십시오.

편집

귀하의 경우 특별한 다른 것은 당신이 기본적으로 모든 동사를 허용하지 않는 IIS 7.5을 사용하고 있다는 점이다.

당신은 옵션이

IIS 7.5, Web Service and HTTP 405 error

+0

그래, 난 이미이 문서를 발견 to 동사 허용해야합니다. .svc 처리기는 이미 모든 동사를 허용합니다. Firefox HTTP Access Control의 경우, 복사/붙여 넣기 응답에서 볼 수 있듯이 일을 처리하는 데 필요한 응답 헤더라고 생각하는 것을 추가했습니다. – Tedderz

+0

@Tedderz 필요한 응답 헤더를 추가했지만 405가 아니라 200 응답을 반환해야합니다. –

+1

실제로 링크에 언급 된 [WebInvoke (Method = "*")] 특성이 없다는 것을 발견했습니다. 그러나 WCF를 추가하면 컴파일 오류가 발생합니다. 계약 'xxxx'의 'xxxx'작업은 WebGetAttribute/WebInvokeAttribute에서 '*'메서드를 지정하지만 Method의 유일한 값은 GET 또는 POST입니다. 다른 값은 'System.ServiceModel.Description.WebScriptEnablingBehavior'에서 지원되지 않습니다. 이 문제를 해결하는 방법에 대한 아이디어? 인터넷 검색은 많은 것을 가져 오는 것 같지 않습니다. – Tedderz

관련 문제