Фон: - Я создал службу WCF, размещенную в локальной системе IIS. Служба предоставляет метод GET/POST и разрешен кросс-домен и может быть доступен с помощью https. Чтобы сделать его доступным, используется самозаверяющий сертификат.
Тестирование:. Когда я пытаюсь выполнить перекрестный вызов ajax в домене, он отлично работает для запроса GET и запроса POST (только те методы post, которые не принимают данные как json) в IE10/Edge. Я могу сделать перекрестный вызов домена для любого запроса GET/POST в браузере Chrome/Firebox. Только это IE 10/Edge, которые вызывают проблему для вызова перекрестного домена для запроса POST, когда параметр contenttype: accept/json передается в ajax-вызове.
Исследование: - Я прочитал много блогов /mdn и узнал спецификацию cors, в которой IE не придерживается религиозных отношений. Я знаю, что спецификация cors не соответствует произвольному значению заголовка/заголовка, из-за которого префикс cors прервался.
Пример запроса ajax, который я делаю: -
var postDT = { "postValue": "test" };
        debugger;
        $.support.cors = true;
        $.ajax({
            type: "POST",
            data: JSON.stringify(postDT),
            url: "http://ateet3371/Service1.svc/postdata",
            contentType: "application/json; charset=utf-8",
            dataType: "JSON",
            processData: true,
            success: function (data) {
                 alert(data);
            },
            error: function (jqXHR, textStatus, errorThrown) {
                var a = jqXHR;
                alert(jqXHR + '---' + textStatus + '---' + errorThrown);
            }
        });
Если я удалил contentType: "application/json; charset=utf-8", тогда он выкинул ошибку с ошибкой, иначе он сбросит ошибку отказа в доступе.
И реализация метода в WCF: -
[OperationContract]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "PostResponseData")]
    string PostResponseData(PostDataTest postDT);
И datacontract: -
[DataContract]
public class PostDataTest
{
    private string post_value;
    // Apply the DataMemberAttribute to the property.
    [DataMember]
    public string postValue
    {
        get { return post_value; }
        set { post_value = value; }
    }
}
Если я использую данные метода PostUrl, то вызов ajax выполняется успешно и возвращает правильные результаты, если ContentType: заголовок "Application/json" удален из запроса.
[OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "PostUrlData/{value}")]
    string PostUrlData(string value);
Я уже написал код в событии BeginRequest в Global.asax WCF для обработки запроса опции: -
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
        if (HttpContext.Current.Request.HttpMethod == "OPTIONS" )
        { 
        //These headers are handling the "pre-flight" OPTIONS call sent by the browser
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, HEAD");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, X-Requested-With, Session");
        HttpContext.Current.Response.AddHeader("Access-Control-Expose-Headers", "DAV, content-length, Allow" );
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000" );
        HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache,no-store");
        HttpContext.Current.Response.End();
        } 
И я не могу включить параметр Allow cross domain call в IE, поскольку конечный пользователь не будет делать такие шаги.
Застрял в проблеме: - Но по-прежнему не удается выполнить почтовый вызов JSON в IE 10/Edge (которые разрешены cors).
(Отредактировано) Обновления: Сайт IIS, на котором размещен WCF, включен только Анонимная аутентификация, а другая идентификация отключена. Даже я пробовал с действительным сертификатом для https, но все же он не работает для IE, но отлично работает для хрома.
Заголовок запроса
 OPTIONS https://service.domian.com/projectservice.svc/GetMultiListData HTTP/1.1
Accept: */*
Origin: https://sitename.servicedomain.com
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: sitename.servicedomain.com
Content-Length: 0
Connection: Keep-Alive
Cache-Control: no-cache
Заголовки ответов
 HTTP/1.1 200 OK
Cache-Control: no-cache,no-store
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: sitename.servicedomain.com
Access-Control-Allow-Methods: GET,POST,PUT,HEAD
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin,Content-Type,Accept,X-Requested-With,Session
Access-Control-Expose-Headers: DAV,content-length,Allow
Access-Control-Max-Age: 1728000
X-Powered-By: ASP.NET
Date: Thu, 04 Aug 2016 17:26:27 GMT
Content-Length: 0
Пожалуйста, помогите мне, поскольку я просматриваю множество статей и блога и все еще не в состоянии решить проблему. Ваша помощь будет принята с благодарностью!
ЭКСПЕРТ ПОЖАЛУЙСТА ПОМОГИТЕ МНЕ!
