0

Wir haben diese Architektur:Web ist extern und Client-seitige Anwendung, wie Ajax-Aufruf zu machen, erreichen internen App Server

Web Server: Web Application bereitgestellt wird (HTML, JavaScript, CSS)

Application Server : WebApi ist im Einsatz

Problem ist, kann ich keine Ajax Anfrage Application Server erreichen, weil seine hinter Firewall.

Die Webanwendung soll öffentlich für Internetbenutzer verwendet werden.

Welche Änderungen sollten wir tun, damit es funktioniert?

Sollten wir unsere Webanwendung auf Application Server verschieben? Aber wie wäre das im Internet zugänglich?

Vielen Dank im Voraus für Anregungen/Ratschläge.

+1

Sie sollten Ihre Web-API auf Ihren Webserver verschieben und dann den Webserver über Firewall-Ausnahme mit dem Anwendungsserver kommunizieren lassen. –

+0

@deezg Wenn ich webapi auf Web Server verschiebe, warum brauchen wir dann Application Server mehr, kann webapi direkt mit dem Datenbankserver kommunizieren? Das wirft die Frage auf, warum wir Application Server brauchen, ich meine den Zweck? – Syed

+0

Ich habe Kommentare in die Antwort eingefügt, da sie zu lange für Kommentare waren. –

Antwort

1

Sie müssen eine Ausnahme in der Firewall für die Adresse Ihres Webservers setzen ... auf diese Weise kann Ihr Webserver auf die API zugreifen, aber nichts anderes kann (naja, nicht ganz nichts anderes - andere Sachen auf diesem Web-Server kann aber das leicht gelöst werden, indem man seine Web-App auf seinem eigenen/dedizierten Webserver hostet).

+0

Ich glaube, sie haben bereits diese Ausnahme, wie ich unten in den Kommentaren erwähnt, konnten wir API über C# mit URL (http: // IP-Adressen ...) zugreifen. Aber jetzt, bauen wir komplette Client-Seite Anwendung, d. reines Javascript, HTML und CSS. Und wir müssen Ajax Aufrufe an API – Syed

+0

machen Die Sprache (C# von Javascript) wird keinen Unterschied machen. In beiden Fällen müssen Sie HTTP-Anforderungen eingeben, um auf die API zugreifen zu können. Wenn Ihr SPA nicht auf die API zugreifen kann, ist es höchst unwahrscheinlich, dass sie bereits eine solche Ausnahme konfiguriert haben ... aber wahrscheinlich am besten, um dies mit Ihren IT-Leuten zu beheben, wenn Sie glauben, dass eine solche Ausnahme bereits konfiguriert wurde, aber Sie immer noch sind Probleme mit der Konnektivität haben. –

+0

Ich habe eine Web-API mit MVC erstellt und veröffentlicht, die Ordner (Bereiche, Inhalt usw.) und Dateien (web.config, packages.config usw.) erzeugt hat. Ich habe eine interne IIS-Site, http: // myweb: 122, auf die ich lokal zugreifen kann, aber wie stelle ich sie auch außerhalb unseres Netzwerks zur Verfügung? – Si8

1

Wenn Ihre Webanwendung direkte Aufrufe an den Web-API-Endpunkt sendet (z. B. eine einseitige Anwendung, die ein clientseitiges JavaScript-Framework wie AngularJS verwendet und/oder AJAX-Aufrufe an die Anwendungsserveradresse verwendet), gibt es keine So können Ihre Clients auf Ihre API zugreifen, wenn Sie keinen öffentlichen Zugriff auf Ihren Anwendungsserver zulassen.

Das liegt daran, dass sich Ihr Client in den Webbrowsern Ihrer Benutzer befindet.

Sie müssen eingehende Verbindungen zu Ihrem Anwendungsserver über das Internet in Ihrer Firewall zulassen.

+0

Sie haben absolut Recht, seine SPA mit AngularJS auf Web-Server bereitgestellt und muss auf WebApi zugreifen befindet sich auf Anwendungsserver. Ich habe mit unserem Netzwerk-Team gesprochen und sie können es aus Sicherheitsgründen und ähnlich dem Datenbank-Server nicht ins Internet stellen. Wir haben eine weitere Anwendung, die auf Asp.Net gebaut wird und obwohl C# wir Service-Aufrufe an App Server (WebApi) direkt ohne Probleme machen. Aber in diesem Fall schreiben wir die komplette Client - Seite - App (SPA) und möchten mit Ajax - Aufrufen auf WebApi zugreifen. – Syed

+0

Ich habe eine Web - API mit MVC erstellt und veröffentlicht, die Ordner (Bereiche, Inhalt usw.) Und Dateien (Web .config, packages.config usw.). Ich habe eine interne IIS-Site, http: // myweb: 122, auf die ich lokal zugreifen kann, aber wie stelle ich sie auch außerhalb unseres Netzwerks zur Verfügung? – Si8

0

Nun, alles hängt davon ab, wie Sie die Dinge betrachten und wie verteilt Ihre Anwendung sein sollte (Kriterien wie Belastung, Sicherheit). Im Allgemeinen ist die Web-API möglicherweise nur ein weiterer Client (aus der Perspektive des Anwendungsservers). Auf der anderen Seite, im robusten/verteilten System, würden Sie Web-API nur als Endpunkt (Controller, Mapper und ähnliches) haben, dass Ihre Mobile/Ajax-Clients Anfragen senden und dann Web API kommuniziert mit Application Server (wo Ihre Geschäftslogik ist).

Wenn die Web-API direkt mit der Datenbank kommuniziert, ist dies keine gute Idee, da Sie beim Hinzufügen von Clients zum Anwendungsserver (mvc, web api, Dienste usw.) so viele Datenbankzugriffspunkte haben wie Clients. Es handelt sich also um ein Problem bei der Codepflege und um ein Problem, dass Ihre Ansichtsebene die DB kennt.

Idealerweise benötigen Sie den Anwendungsserver als eine Ebene, auf der sich Ihre Geschäftslogik befindet, und die, auf die alle Ihre Clients abzielen (mvc web app, web api, Desktop, Dienste usw.) und das ist die eine das sollte zu DAL kommunizieren. Außerdem können Sie Firewallregeln auf Ihrem Anwendungsserver festlegen, um eingehenden Datenverkehr von vertrauenswürdigen Quellen (Ihren anderen Servern) statt vom gesamten Internet (Ajax) zuzulassen.