xmlHttp.getResponseHeader + Non funziona per CORS

Ho un WCF asp.NET su .NET 4. Questo servizio è utilizzato per autenticare gli utenti. Stiamo inviando un nome utente e una password e quindi un’intestazione HTTP deve essere restituita con il cookie di autenticazione incluso. Usando una pagina di test ospitata localmente funziona correttamente. Ora sto tentando di accedere alle informazioni di intestazione cross domain. Ho installato la mia pagina di test su una macchina diversa e ho configurato per chiamare attraverso WCF. La chiamata funziona e la risposta “dati” nella chiamata è corretta. Tuttavia, non riesco ad accedere alle informazioni dell’intestazione con uno dei seguenti elementi:

alert(xmlHttp.getAllResponseHeaders()); 

o

  alert(xmlHttp.getResponseHeader("Set-Cookie")); 

Usando il debugger in IE e il plug-in “Live HTTP Header” per Firefox, posso vedere le informazioni dell’intestazione che vengono restituite.

Nella mia pagina ajax globale sto impostando la risposta per gestire CORS.

  private void EnableCrossDomainAjaxCall() { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); HttpContext.Current.Response.End(); } } 

Questo è l’AJAX che sto usando per chiamare il servizio:

 $("#btnLogin").click(function (e) { var geturl; geturl = $.ajax({ // type: "POST", type: "GET", contentType: "application/json; charset=utf-8", url: 'http://10.0.4.66/AuthenticationService.svc/Login?Name=test&password=pwsd', // url: '../SecurityServer/AuthenticationService.svc/Login?Name=test&password=pwsd', dataType: "jsonp", error: function (request, status, error) { alert('Error Occured'); }, crossdomain: true, success: function (data, textStatus, xmlHttp) { // alert(xmlHttp.getResponseHeader("Content-Type")); document.write(xmlHttp.getResponseHeader("Content-Type") + "
"); alert(xmlHttp.getAllResponseHeaders()); alert(xmlHttp.getResponseHeader("Set-Cookie")); var headers = ''; var headerPair = xmlHttp.getAllResponseHeaders('wcfCookie').split("\r\n"); var output = ''; $.each(headerPair, function (key, line) { var parts = line.split(':'); if (parts[0] == 'wcfCookie') { ChocChip = parts[1] return false } }); } });

Di seguito sono riportate le mie informazioni di intestazione da “Intestazioni HTTP in diretta”

 Date: Mon, 04 Feb 2013 12:12:40 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 4.0.30319 Access-Control-Allow-Origin: * Set-Cookie: wcfCookie=8D38D5D6A0F138FEB595DD016F7694EDDF3E6757C82ED3D419F5047A5294974C1885487465CEC0A0BCC2B3802C7B03FF9F5370A05D4CCBDDDABCB1558C3816044BF4F78209BF38C6B1A7CAD34CD3C85C40B8515CFB1C2B2694BC78803D8DACB4 Content-Length: 65 Cache-Control: application/json; charset=utf-8 Content-Type: application/x-javascript