从jQuery到WCF服务的POST在Chrome,Firefox中运行,但在IE中不运行(CORS问题)

时间:2016-07-22 15:55:13

标签: jquery wcf post cors

我正在尝试POST来自jQuery / knockout网络应用的搜索请求。我按照for implementing CORS in WCF的说明进行了操作,并在服务中添加了以下内容:

    [OperationContract]
    [WebInvoke(Method = "OPTIONS", UriTemplate = "*")]
    public void GetOptions()
    {
    }

搜索请求在Chrome和Firefox中运行良好。 Chrome会发送OPTIONS请求,该请求已成功处理(200),并且access-control标头位于响应中,然后它会发送POST,返回搜索结果。所以CORS预检工作正常。

但IE是另一回事。它还发送成功处理的OPTIONS请求,并且access-control标题位于响应中,但它只是...停止。它之后不会发送POST请求,并且在开发人员工具中的状态为(aborted)

控制台的错误为XMLHttpRequest: Network Error 0x80070005, Access is denied.,但OPTIONS请求的状态为200,即使尝试POST也从未(我可以说)。所以我甚至都不知道被拒绝了什么。

我正把头发拉出来。很明显,这三种浏览器都出现了问题,但为什么只有IE呢?这些是我要添加的标题:

requiredHeaders.Add("Access-Control-Allow-Origin", "*");
requiredHeaders.Add("Access-Control-Allow-Methods", "POST,GET,PUT,DELETE,OPTIONS");
requiredHeaders.Add("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,Accept");
requiredHeaders.Add("Access-Control-Max-Age", "1728000");

这是客户方的要求:

$.ajax({
    url: serviceUrl + "ExemptServices.svc/json/search",
    method: "POST",
    contentType: "application/json",
    data: JSON.stringify(ko.mapping.toJS(self.Criteria)),
    success: function (response) {
        self.SearchResults(response.ResultData);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        alert("Error searching." + errorThrown);
    }
});

我还应该提到Web和WCF服务器都在本地Intranet区域,并且所有内容都在同一个内部网络上,包括客户端。

这是来自fiddler的日志。只有OPTIONS请求,没有尝试执行POST

OPTIONS http://ecydevws2/ustservice/ExemptServices.svc/json/search HTTP/1.1
Accept: */*
Origin: http://ecyapdevtcp
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type, accept
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: ecydevws2
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 0
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,PUT,DELETE,OPTIONS
Access-Control-Allow-Headers: X-Requested-With,Content-Type,Accept
Access-Control-Max-Age: 1728000
Set-Cookie: ASP.NET_SessionId=z35robabmzflsyp0l1xl0qey; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Mon, 25 Jul 2016 17:49:43 GMT

0 个答案:

没有答案