1

これは、MSDN で回答を読むことができる質問に見えるかもしれませんが、ビジネス上の問題を解決したいので、シナリオについて質問したいと思います。

サーバーでホストされているサービスがあり、クライアントがサービス呼び出しを行います。現在、netTCP バインディングを使用しています。サーバーが起動して実行されている場合、サービスが利用可能な場合、すべてが正常に機能します。ここで、サーバー ダウンのシナリオを処理する必要があります。サーバーがダウンした場合に備えて、クライアントのローカル キャッシュ ファイルを使用してクライアント リクエストに対応します。サーバーがダウンしている間に行われたすべてのリクエストをキャッシュし、サーバーが起動して実行されたらサービスを呼び出したいと考えています。

netMsmqBinding を使用することを考えています。これまで読んだ限りでは、切断されたシナリオでうまく機能することが示唆されているためです。

  • Q.1 netMsmq を使用してこのシナリオを処理できますか?
  • Q.2 そうでない場合、この問題を解決するために私が従うことができる別のアプローチは何ですか?
  • Q.3 サーバーがダウンした場合に WS-Discovery を使用して、クライアント呼び出しがサービスに接続できないことを確認できますか?

編集:シナリオはクライアントサーバーです。しかし、クライアントへの呼び出しごとに応答する必要があります。クライアントも私だけが開発および保守しているため、最適なソリューションを実装するのに適した立場にあります.

私はWCFがあまり得意ではないので、私を導いてください。

4

2 に答える 2

1

広告の質問 1: MSMQ の使用は、サービスが常に稼働しているとは限らないシナリオに最適です。メッセージを受信するには、メッセージ キューをホストするサーバーが起動しており、到達可能である必要があることに注意してください。ただし、シナリオについて、特に現在 NetTCP を使用している理由について、他に何も教えてくれませんでした。これが重要な理由は、MSMQ ではできないことがいくつかあるためです。たとえば、二重通信はそのままでは機能しません。

広告の質問 2: 別の方法として、クライアントにロジックを実装し (あなたがクライアント ソフトウェアの所有者かどうかは質問からはわかりません)、ローカル キューを作成し、サービスが (一時的に) オフラインの場合に後でメッセージを再試行することもできます。クライアントにプロキシ MSMQ サービスがあり、メイン サービスが起動したらメッセージをリレーすることもあると思います。

広告の質問 3: はい、これには Discovery を使用できます。サービスは、オンラインまたはオフラインになったときにクライアントにアナウンスする必要があります。最も単純な例は、UdpAnnouncementEndpointを使用することです。クライアントでは、AnnouncementServiceクラスを使用して、オンラインまたはオフラインになるサービスをリッスンし、利用可能なサービスのローカル リストを保持できます。別の方法として (たとえば、UDP ブロードキャストが実行できない場合) 、アナウンスをリッスンするよく知られた場所に検出プロキシサービスを作成できます。これにより、クライアントは必要なサービスがオンラインであるかどうかを即座に知るためにアクセスできます。

于 2012-09-08T14:35:45.307 に答える
1

netMsmqBindingはい、この目的で使用できます。頻繁にダウンする可能性がある衛星リンクを介して実行されているサービスに対してこれを行っています。

考慮する必要がある重要な制限の 1 つは、すべての呼び出しがキューベースのトランスポートである一方向でなければならないことです。リクエストの結果を取得する必要がある場合は、別の応答メカニズムを提供する必要があります (反対方向の同様のキューにすることができます)。

于 2012-09-08T14:34:47.183 に答える