2016-06-16 2 views
14

Wir haben eine App, die SignalR verwendet, um lokal mit Scannertreibern zu kommunizieren, die seit ein paar Jahren an IE, Chrome und Firefox arbeiten. die kein Problem haben, die Hubs js-Headerdatei für SignalR herunterzuziehen. Sobald Edge herauskam, sahen wir ein Problem mit dem Gespräch mit localhost und nach langen Bemühungen, eine Einstellung zu finden, die es kommunizieren ließ (und viele Stunden mit einem Microsoft-Ticket, dass sie keine Lösung gefunden hatten), beschlossen wir, Header hinzuzufügen, damit Edge dies zuließ Zugriff auf Domain:Edge unter Windows 10 32-Bit blockierender Ajax-Anruf an localhost mit Netzwerkfehler 0x2efd

Access-Control-Allow-Origin: https://localhost:11000

Dies schien zu arbeiten, aber wenig haben wir feststellen, dass es für eine 64-Bit-Windows-10 Edge-gearbeitet, aber nicht auf 32-Bit-Windows-10 Rand. Ich habe Stunden damit verbracht, für alle Zonen alle Sicherheitseinstellungen zu senken und den geschützten Modus Sperren, verschiedene AJAX Tricks versuchen die Datei zu ziehen, aber weiterhin den Fehler erhalten:

SCRIPT7002: XMLHttpRequest: Network Error 0x2efd, Could not complete the operation due to error 00002efd.

Der folgende Pseudocode fehlschlägt:

$.ajax({ 
    url: "https://localhost:11000/signalr/hubs", 
    crossDomain: true, 
    success: function (data) { 
     console.log("success"); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     console.log("error:"); 
     console.log(jqXHR); 
    } 
}); 

Ich bin auf der Suche nach einem Einblick in Einstellungen oder etwas anderes zu versuchen, oder wenn jemand anderes dieses Problem gesehen hat. Eine andere Information, Fiddler zeigt keinen Verkehr für den Anruf, so dass es vom Browser blockiert wird, wie es scheint. Auch auf demselben Computer, der mit Edge - IE ausfällt, sind Chrome und FF erfolgreich.

+0

Paare von Fragen und Dingen zu überprüfen. Überprüfen Sie zunächst, ob "localhost" zu 127.0.0.1 aufgelöst wird (ich habe Leute gesehen, die sich mit der hosts-Datei herumschlagen und die Dinge wirklich vermasseln). Zweitens, ist das Zertifikat ein gültiges Zertifikat? Oder ein selbstsigniertes Zertifikat? – dman2306

+0

@ dman2306 Wenn es in 64 Bit, aber nicht 32 Bit funktioniert, dann kann es nicht die Hosts-Datei sein, da dies eine globale Ressource ist. Ich schlug auch Zertifikate in meiner Antwort – RhysO

+0

Das Zertifikat ist richtig, da es mit den anderen 3 Browsern funktioniert. Auch das Zertifikat ist nicht abgelaufen. Wir erstellen zum Zeitpunkt der Installation ein selbstsigniertes Zertifikat, das sehr lange dauert. Darüber hinaus handelt es sich nicht um ein einziges Computerproblem, sondern um unser QA-Team, das dasselbe Problem auf mehreren 32-Bit-Computern, jedoch nicht auf mehreren 64-Bit-Computern festgestellt hat. Es wird mit verschiedenen Konfigurationen getestet. Das Problem stellt sich nur auf 32-Bit Edge. 32-Bit Win 7 IE und sogar 32-Bit Win 10 IE funktioniert. –

Antwort

0

Probieren Sie es im IE-Kompatibilitätsmodus aus, indem Sie in dev tools gehen und aus der oberen Dropdown-Liste auswählen, wenn der Fehler weiterhin auftritt, sind die Chancen, dass es einige Windows-Systemdateien sind, die IE verwendet. Verwendet dieser Aufruf Authentifizierung mit Zertifikaten? Vielleicht ist das Zertifikat veraltet oder Edge verwendet eine andere Authentifizierungsmethode? Überprüfen Sie Ihre Quellenregisterkarte im IE (sowohl kompatibel als auch nicht kompatibel), um festzustellen, ob die Ressource geladen wird, da Fiddler nur HTTP- und HTTPS-Datenverkehr erfasst. Das sollte Sie in Bezug auf Fehler usw. in die richtige Richtung lenken. Schließlich, vielleicht nur eine C# -App, die eine Anfrage an die gleiche URL macht, code, ist es möglich, dass die neue Version von .NET die gleichen Abhängigkeiten verwendet, die Ihre brechen könnten Anruf. Wenn ja, wird C# Ihnen genug eines beschreibenden Fehlers geben, um das Problem zu beheben

+0

IE Debugging-Tools hat dieses Dropdown aber Edge Debugging-Tools nicht zu sehen: http://StackOverflow.com/a/31535916/1322383. Als nächstes, wie schreibe ich eine C# -App, die Domains überquert, wie dies erforderlich wäre? Ich kann eine Anfrage schreiben, dann eine andere Anfrage, aber nicht CORS. Ich denke, ich könnte eine Web-App schreiben und einen Haltepunkt in die js setzen und sehen, was es sagt, aber selbst das wird nur die gleichen Ajax-Event-Objekte bevölkern wie Edge. –

+0

Versuchen Sie es mit IE 11, aber wenn Sie eine Cross-Origin-Anwendung benötigen, wäre ich mehr als glücklich zu helfen, aber diese Art von Problem benötigt nicht wirklich eine C# -App, um es zu beheben, müssen Sie nur den Unterschied herausfinden in Edge 64 Bit und Edge 32 Bit ... Abgesehen von den offensichtlichen :) – RhysO

+0

Wie in der Post erwähnt, funktioniert es auf IE auf dem gleichen Computer (IE 11). Dies ist eine der Dinge, die es schwer zu verstehen macht, IE 11 zieht seine Einstellungen aus den Einstellungen der verwalteten Internetoptionen und angeblich Edge von der gleichen Stelle, aber IE funktioniert und Edge nicht. Wenn es mit 3 anderen Browsern auf demselben Computer funktioniert und dieselbe App auf einem 64-Bit-Edge funktioniert, klingt es wie ein Edge-Bug. Wir senden EXPLIZITY Header, um diese Kommunikation zu erlauben, aber es ist nicht. –

0

Ich hatte das gleiche Problem. Während Ajax Aufrufe an eine Seite auf der gleichen Domain in jedem anderen Browser funktionierten, würden sie dies in Edge nicht tun. Das Öffnen der URL, die für den Ajax-Aufruf in einer anderen Registerkarte verwandt wird, würde die richtigen Ergebnisse liefern. Das Hinzufügen des Code-Stücks zu der Seite, die die Ajax-Aufrufe bedient, hat es irgendwie repariert ... Der Code ist in C#, aber vielleicht gibt dies eine allgemeine Idee, wie man es in anderen Sprachen reparieren kann.

if (Request.UserHostName == "127.0.0.1") 
     Response.AppendHeader("Access-Control-Allow-Origin", "*"); 
+2

Haben Sie schon gesehen, dass ich den Header Access-Control-Allow-Origin? Ich kann nicht * Wildcard verwenden, weil dies eine Bank-Website ist, und wie erwähnt, diese feste 64 Bit aber nicht 32 Bit Edge. –

+0

Hi @StevenEdison hast du herausgefunden, wie man ein Problem auf 32 Bit Edge löst? – Davidenko

0

können Sie dies versuchen.

$.ajax({ 
     url:url, 
     type:"POST", 
     data:data, 
     contentType:"application/json; charset=utf-8", 
     dataType:"json", 
     success: function(){ 
     // 
     } 
    }); 

und stellen Sie sicher, dass die Parameter richtig zu liefern, Inhaltstyp, Datentyp, responseCode..etc

1

Ihre Anfrage fehlt die folgenden Attribute und fügte hinzu, die das Problem lösen sollte.

  1. Anforderungsmethode: GET, POST usw.
  2. Anforderungs-Inhalt-Typ (Header): application/json usw.
  3. anfordern Datentyp (Header): json, XML usw.

Schauen Sie auch auf dem folgenden Code-Schnipsel:

type:"POST", 
contentType:"application/json; charset=utf-8", 
dataType:"json" 
Verwandte Themen