私は C# デスクトップ アプリケーションを持っており、Web サービスを問題なく使用しています (「サービス参照の追加」によって wsdl が追加されたので、オブジェクトを作成してその関数を呼び出します)。
今、私は長いポーリング手法を使用したいのですが、クライアントの観点からこれを行う方法がわかりません。
タイムアウトの設定方法 これ専用のスレッドを使用する必要がありますか? C# デスクトップ アプリケーションの例はありますか? (まだ見つかっていません)
ありがとう、ダムさん
私は C# デスクトップ アプリケーションを持っており、Web サービスを問題なく使用しています (「サービス参照の追加」によって wsdl が追加されたので、オブジェクトを作成してその関数を呼び出します)。
今、私は長いポーリング手法を使用したいのですが、クライアントの観点からこれを行う方法がわかりません。
タイムアウトの設定方法 これ専用のスレッドを使用する必要がありますか? C# デスクトップ アプリケーションの例はありますか? (まだ見つかっていません)
ありがとう、ダムさん
Web サービス オブジェクトでタイムアウトを設定できるはずです。詳細は、使用しているクラスによって異なりますがWebClientProtocol.Timeout
、例を見てください。
これで、専用スレッドから同期的に呼び出すことも、サービスが応答したときに (おそらくスレッド プール スレッドで) 実行されるコールバックを指定して、Web サービスへの非同期呼び出しを開始することもできます。その場合、非同期呼び出し自体でタイムアウトを指定できることに気付くかもしれません。これも、使用している Web サービス プロキシ クラスの種類によって異なります。
そうすれば、応答を待つだけでスレッドを「無駄にする」必要はありませんが、非同期プログラミング モデルは同期モデルよりも理解しにくいことに気付くかもしれません。これらのリクエストが一度に 1 つまたは 2 つしかない場合は、余分なスレッド数が問題になることはほとんどありません。500 の異なるサービスからの応答を待っている場合、それは別の問題であり、非同期モデルが間違いなく適しています。
スレッドの問題については、Jon の回答を参照してください。
タイムアウトの問題の解決策は次のとおりです。vs 2008 では、wsdl から「サービス参照」を追加すると、デフォルトで WCF が使用され、タイムアウト値を設定する方法が見つかりません。
そのため、サービス参照を右クリックするときは、「Web 参照」(詳細/Web 参照の追加) を選択する必要があります。そうすれば、「通常の」Web サービスのみが使用され、タイムアウト パラメータが使用可能になります。