2017-04-20 3 views
0

Halten Sie an. bevor Sie dies als doppelt markieren. Ich habe ein etwas anderes Problem. Also ich rufe eine API, die diese Ausnahme auslöst. Aber - der Haken ist Dies passiert nur, wenn der Anruf vom Server gemacht wird. Wenn ich einen eckigen/Ajax-Aufruf mache - das funktioniert ganz gut. Wo, wie in .net, wenn ich die folgendeEs konnte keine Verbindung hergestellt werden, da das Zielgerät aktiv zurückgewiesen wurde

using (HttpClient hc = new HttpClient()) 
{ 
    hc.BaseAddress = new Uri(endpoint); 
    hc.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    HttpResponseMessage response = hc.GetAsync(url).Result; 
} 

I erhalten die innere Ausnahme schreiben Keine Verbindung zu sagen, da der Zielcomputer aktiv verweigert xx.xxx.xx.xx gemacht werden könnte: pp

Ich überprüfte alle Verbindungen Here und here. Sie alle sprechen über Firewall-/Netzwerkprobleme. Ich glaube nicht, dass das eine Firewall oder ein Netzwerk ist, weil es über Ajax funktioniert. Ich denke mehr mit Serverkonfiguration zu tun. Alle Hinweise wären hilfreich.

Auch - das funktioniert, wenn ich den Anruf vom Browser oder über Fiddler mache.

+0

So rufen Sie den gleichen API-Endpunkt von der gleichen Maschine, mit AJAX funktioniert es, mit C# tut es nicht. Richtig? – MrZander

+0

Haben Sie Zugriff auf die Serverkonfiguration oder ist dies eine externe API? – MrZander

+0

@MrZander - Korrekt. Same Api - Gleicher Anruf .. Gleiche URL. Es ist eine externe API, die einem anderen Team gehört. Ich kann sie bitten, nach etwas Bestimmtem zu suchen. aber ich habe keinen direkten Zugang –

Antwort

0

So habe ich endlich herausgefunden, was der Grund war - aber ich bin mir nicht sicher, warum es passiert.

Der Grund ist, weil - Visual Studio unsere Proxy-Einstellungen nicht honorierte. Im Wesentlichen - wir sprechen von 3 Servern hier

Also meine Maschine ip: xxx.xx.xx.1
Unser Unternehmen Proxy-Server IP: xx.xx.xx.2
Die api ip: xxx .xx.xx.3 url (api.com)

Jeder Anruf wird über unseren Proxy weitergeleitet, den ich in meinen Interneteinstellungen sehen kann. Also als ich Wireshark installiert habe und die Route gesehen habe -> Wenn ich von Visual Studio aus zugreife, versuche ich direkt von meinem Host-Rechner auf den API-Server zuzugreifen, ohne über den Proxy zu gehen.

das ist: xxx.xx.xx.1 -> xxx.xx.xx.3 [Fehlerhaft]

Wo, wie, wenn ich von Browser versuchen - es den Proxy ehrt

Einstellung, die ist: xxx.xx.xx.1 -> xxx.xx.xx.2

[Erfolg] xxx.xx.xx.2 -> xxx.xx.xx.3 [Erfolg]

Das Update war - Wenn ich hinzugefügt, um den Host-Eintrag

01 zu sagen:

xxx.xx.xx.2 - api.com

Dinge zu arbeiten begann - da alle Anrufe an die api jetzt über den Proxy-Server weitergeleitet wurden. Ich weiß nicht, warum das passiert oder wie man das vermeidet. Atleast hat mein Problem gelöst.

Ich überprüfte Einstellung - ich habe nichts in meiner web.config/machine.config.

1

Wenn Sie denselben API-Aufruf von demselben Computer ausführen und eine Methode funktioniert, während die andere nicht funktioniert, werden Sie wahrscheinlich nicht etwas senden, das der Server möchte.

Wenn Sie einen AJAX-Aufruf verwenden, hängen Ihre Browser viele zusätzliche Informationen an, die Sie replizieren müssen, wenn die API antworten soll. Zum Beispiel Cookies und die User-Agent-Zeichenfolge. Der Server erkennt, dass Sie nicht ein Browser sind, und Ihre Anfrage ablehnen. Es gibt viele berechtigte Gründe dafür, wie zum Beispiel versuchen, stoppen automatisierte Bots von ihrer API schlagen.

Sie können sehen, was Ihr Browser sendet, indem Sie die Entwicklertools verwenden. Zum Beispiel in Chrome können Sie die Netzwerk-Request-Header wie folgt lesen:

Chrome

Oder es könnte immer noch sein, Ihre Firewall-Anwendung zu beschränken und damit Ihrem Browser durch. Versuchen Sie, eine Regel explizit für Ihre Anwendung hinzuzufügen.

+0

während das ist wahr - meine api kann ohne wirklich etwas ausführen. finden Sie beigefügt einen Geiger dieses Anrufs. Sie können das im Header sehen - ich habe buchstäblich nichts aber das funktioniert. http://i.imgur.com/cexxdaQ.png –

+0

@kveey Dann nehme ich an, es muss eine Art von lokalen Konfigurationsproblem sein. Hast du den Firewall-Ausschluss ausprobiert? – MrZander

Verwandte Themen