我在http://localhost:8080上有一个wcf服务,在http://localhost:82上有一个web应用程序。我有Windows764位和IIS7.5。
web应用程序中的页面使用jquery向wcf服务发出ajax请求。
在ie中,服务呼叫执行良好。在firefox中,我得到一个405方法不允许的错误。web应用程序从后面的asp.net代码进行的服务调用总是成功的。
其他开发人员的构建也有同样的问题。我最初认为这与ff 3.5中引入的跨站点安全限制有关,基于本文:https://developer.mozilla.org/En/HTTP_access_control。但是,在添加了我需要的所有响应头之后,问题仍然出现。
我已经运行了aspnet_regiis.exe命令和wcf servicemodelreg.exe命令。
以下是Firefox提出的请求:
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
以下是服务器的响应:
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>
有什么想法吗?
最佳答案
除了post或get之外,firefox还会发送一个options请求。
请参见http://forums.iis.net/t/1160649.aspx了解如何修复它。
编辑
在您的情况下,另一个特别之处是您使用的是iis 7.5,它在默认情况下不允许所有动词。
你需要允许选项动词
IIS 7.5, Web Service and HTTP 405 error