2016-03-30 8 views
-1

Meine Situation:Flask Webservice wird keine externe Nachricht empfangen

Python webservice auf dem lokalen Rechner:

from flask import Flask, jsonify, request 

app = Flask(__name__) 

@app.route('/subscribe', methods=['POST']) 
def subscribe(): 

    //Do webservice work... 

    return "completed" 

if __name__ == '__main__': 
    app.run(host='0.0.0.0') 

C# webservice in Azure Cloud:

public static async Task SendSubscriptionAsync(string deviceName) 
{ 
    var client = new RestClient(); 
    client.BaseUrl = new Uri("http://{IP adress}:5000"); 

    var request = new RestRequest(Method.POST); 

    request.Resource = "subscribe"; 
    request.AddParameter("deviceName", deviceName, ParameterType.QueryString); 

    IRestResponse response = await client.ExecuteTaskAsync(request); 
    var content = response.Content; 
} 

Wenn ich ausführen, um die C# webservice lokal empfängt der Python-Webservice die Nachrichten.

Wenn ich jedoch den C# -Webdienst von Azure Cloud aus starte, empfängt der Python-Webservice die Nachrichten nicht.

Ich habe die Flask Quickstart manuel gelesen. Warum wird Python keine externen Nachrichten empfangen?

+0

Der Versuch, ohne Hafen von außerhalb Ihres LAN lokale IP zugreifen Weiterleiten? – Sevanteri

+0

Wenn Sie den Flashin Server zu Hause auf Ihrem Computer und den Webservice irgendwo anders betreiben, ist das weder ein Problem mit Kolben noch mit Python. Sie sollten über NAT lesen: https://en.wikipedia.org/wiki/Network_address_translation und https://en.wikipedia.org/wiki/Port_forwarding – Wombatz

+1

Mir war nicht so etwas wie Port-Weiterleitung bewusst. Ich werde es mir ansehen. – BlueCastle

Antwort

0

Basierend auf meinem Verständnis, möchten Sie den Flask-Dienst auf dem lokalen vom C# -Client auf Azure anfordern.

Nach meiner Erfahrung besteht die einfache Möglichkeit darin, Ihren lokalen Router mit der Portweiterleitung und einem dynamischen DNS für die dynamische ADSL-IP zu konfigurieren. Dann kann der C# -Client auf den Domänennamen mit dem angegebenen WAN-Port des Routers zugreifen.

Wenn Ihr Router diese Funktionen nicht unterstützt, können Sie versuchen, den Azure Service Bus zu verwenden, um die Kommunikation zwischen dem lokalen Flask-Dienst und dem Cloud C# -Dienst zu erstellen.

Das Prinzip ist, dass ein Paar Service Bus Queue zum Senden und Empfangen zwischen beiden Diensten wie folgt erstellt.

  • The Cloud C# Service eine JSON-Nachricht als Anfrage senden 1 to Queue, dann die lokale Flask Service erhalten über Polling die JSON-Nachricht und analysieren die Nachricht an die Argumente für die Arbeit.

    lokalen Flask Service < ------ Warteschlange 1 < ------- Wolke C# service

  • Der lokale Flask Dienst das Ergebnis als abgeschlossen-Nachricht 2 Warteschlange , dann erhält der Cloud C# -Dienst die Ergebnisnachricht per Polling.

    lokalen Flask Service ------> Warteschlange 2 -------> Wolke C# Service

Verwandte Themen