2012-03-26 10 views
4


こんにちは
Windows Phoneアプリケーションはサーバーに接続し、そこからメッセージを取得する必要があります。これは、サーバー上でWCFとロングポーリングを使用して行われます。 3分はサーバーで定義されたタイムアウトです。 Windows Phoneからの呼び出しは、HttpWebRequestを使用して行われます。
問題は、Windows Phoneデバイスの取得要求が60秒(エミュレータの値が異なる(3分以上))のタイムアウトがあることです。
現在、私はサーバーのタイムアウトを減らすことはできません。 60秒後に新しいGetRequestを実行してもメッセージは消えません。
アイデアがありますか?
ありがとうロングポーリングWindows Phone、60秒TimeOut

答えて

3

モバイルデバイスでは、接続を開いたままにしておくことをお勧めします。私はそれがあなたがやっていることだと仮定しています。私のアプリでは、新しいHttpWebRequestを作成するだけで、いつでも必要なときにポーリングします。しかし、私は40秒ごとに列車の到着ステータスを更新するので、私のアプリでこれを行うには意味がありました。

特定のスケジュールでデータを取得しようとしている場合は、タイマーを設定して3分ごとにWebサーバーを呼び出します。

アプリを閉じているときにチェックできるようにしたい場合や、サーバーに新しいデータがほとんどない場合は、プッシュメカニズムを実装する必要があります。

更新:ここでタイムアウトの問題に対処する上で良い記事だ - http://blog.xyzzer.me/2011/03/10/real-time-client-server-communication-on-windows-phone-with-long-polling/

アップデート2:ようにあなたがそれを配置した場合、あなたは接続をカスケード接続している何を - 私は何を意味することは、可能であるためです」接続ごとに60秒を超える時間があれば、2つの接続を収容するクラスを作成することができます。その1つがタイムアウトすると、数秒前に他の接続を開くことができます。それらの間で最大でも5秒間重なります。あなたはいつも開いている接続を持つことができますこのように。

また、GChatアプリでこれらの人たちが何をしたのかを見ると、ソースコードはlinkで利用可能です。これは、より適切な設計を提供することができる。

+1

私は既にこの記事を見ており、このサンプルでは50秒のタイムアウトを使用しています。この場合は問題ありません。私のアプリでは、メッセージがサーバー上でいつ利用可能かを判断することができません。チャットアプリのようなものなので、新しいメッセージが送信されたかどうかを常に確認する必要があります。 – Morti

+0

これは設計によるものだと思います。モバイル接続は長時間オープン/アイドル状態にしないでください。あなたはプッシュがベストです。詳細についてはこちらをご覧ください:http://msdn.microsoft.com/en-us/library/ff402537(v=vs.92).aspx –

+1

プッシュは使用できません。チャットメッセージのようなものです2秒以上の遅延を持つことはできません。より表現力豊かにするには、非常に速く応答する必要のあるSiriアプリのようなものです。さらに、このアプリはWindows Phoneだけではないため、プッシュ通知システムを実装するには3回目を実行する必要があり、応答に時間がかかります。 – Morti

関連する問題