2016-03-30 8 views
-1

マイ状況:フラスコWebサービスは、外部メッセージを受信しません

ローカルマシン上

PythonのWebサービス:Azureのクラウドで

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#のWebサービス:

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; 
} 

私はC#のWebサービスを実行すると、ローカルの場合、Python Webサービスがメッセージを受信します。

Azure CloudからC#Webサービスを実行すると、Python Webサービスはメッセージを受信しません。

私はFlask Quickstart manuelを読んでいます。 Pythonはどのように外部メッセージを受信しませんか?

+0

転送? – Sevanteri

+0

フラスコサーバーを自宅のコンピュータとウェブサービスのどこかで実行している場合、フラスコやPythonに問題はありません。 NATについて:https://en.wikipedia.org/wiki/Network_address_translationとhttps://en.wikipedia.org/wiki/Port_forwarding – Wombatz

+1

私はポートフォワーディングのようなことを知らなかった。私はそれを見ます。 – BlueCastle

答えて

0

私の理解に基づいて、AzureのC#クライアントからローカルのFlaskサービスを要求したいとします。

簡単な方法は、ポート転送とADSL動的IP用のダイナミックDNSを使用してローカルルータを設定することです.C#クライアントは、ルータの指定されたWANポートでドメイン名にアクセスできます。

ルーターがこれらの機能をサポートしていない場合は、Azureサービスバスを使用してローカルFlaskサービスとクラウドC#サービス間の通信を作成できます。

原則として、以下のように両方のサービス間で送受信するサービスバスキューのペアを作成することです。

  • クラウドC#のサービスは、ローカルフラスコサービスがポーリング経由でJSONメッセージを受信して​​作業するための引数にメッセージを解析し、1をキューに要求としてJSONメッセージを送信します。

    ローカルフラスコサービス< ------キュー1 < -------雲C#のサービス

  • ローカルフラスコサービス2をキューにメッセージとして完成結果を送信しますクラウドC#サービスはポーリングを介して結果メッセージを受信します。

    ローカルフラスコサービス------>キュー2 ------->雲C#のサービスなしポートを使用してLANの外からローカルIPにアクセスしようとし

関連する問題