1

私はWCFの初心者であり、プロジェクトを開始するためにいくつかの支援が必要です。

インターネットを介して複数のクライアントと通信(メッセージングシステム)する必要があるマネージドアプリケーション(サーバー)があります。その逆も同様です。

これを達成するための最良のアプローチは何ですか?wsDualBindingを使用していますか?

アップデート

代わりにNetTcpBindingモードを使用することにしました。

4

2 に答える 2

3

これは、サービスが公開する必要のある機能と、サポートする必要のあるクライアントのタイプによって異なります。HTTPベースのバインディングはどれもインターネット上で機能しますが、それは単にデータのエンコード方法の問題です。

組み込みのバインディングとそれらがサポートするものの概要は、http://msdn.microsoft.com/en-us/library/ms731092.aspxにあります。

しかし、最も一般的なものは次のとおりです。

  • BasicHttpBinding-これは基本的なWebサービススタイルのバインディングであり、任意のSOAPクライアントで使用できます。
  • WebHttpBinding-これにより、サービスを非SOAPHTTPクライアントで使用できるようになります
  • WsHttpBinding-これにより、サービスでトランザクションやセッションなどの拡張サービス機能を使用できるようになります。
  • WsDualHttpBinding-これは、サービスにデュプレックスチャネルが必要な場合に必要です。つまり、サービスはクライアントに対してコールバックを行う必要があります。

デュアルバインディングについて具体的に質問したので:

サーバーからクライアントへのコールバックを作成できる必要があるアプリケーションを作成している場合は、デュアルバインディングが実際の唯一のオプションです。ただし、チャットについて具体的におっしゃっていたので、デュアルチャネルサービスはあまりうまく機能しないと思います。

WCFでコールバックが機能する方法は、クライアントがデュアルチャネルを使用してサービスを呼び出し、コールバックインターフェイスの実装を提供する必要があることです。サーバーはこれを使用して、サービスメソッドの呼び出し中にクライアントを呼び出すことができます。コールバックコンテキストはサービス呼び出しごとであるため、その呼び出しが返されると、無効になります。つまり、サーバーはクライアントを非同期的に「呼び出す」ことはできず、クライアントがサーバーを「ポーリング」するのを待つ必要があります。そして、あなたがそれをするつもりなら、あなたはもうコールバックを本当に必要としません。

正直なところ、インタラクティブな双方向チャットアプリケーションにWCFを使用することはないと思いますが、そのための2つの可能なオプションを考えることができます。

  1. サーバーで単純なBasicHttpBindingを使用して、クライアントのポーリングオプションを実行し、新しいメッセージを継続的に要求します。
  2. ローカルWCFサービスをセルフホストするようにクライアントアプリケーションを設定し、ログイン時にエンドポイント情報をサーバーに提供します。これには、クライアントが着信接続を受け入れる必要があり、面倒になります(ただし、接続を解除できる場合は、 dここでNetTcpBindingを探します。)
于 2012-06-03T12:42:25.973 に答える
1

WSDualHttpBindingインターネットには適していません。コールバックは、ファイアウォールとNASの制限がないローカルネットワーク(イントラネット)でのみうまく機能します。

詳細については、この投稿を参照してください。

wsDualHttpBindingを使用してインターネット経由でWCFサービスに接続するとタイムアウトします

WsHttpBindingサーバー間の通信を設定する場合に使用します(WPFで機能するはずです)。

WebHttpBindingJavascriptのデータを使用する場合に使用します。

于 2012-06-03T20:29:51.253 に答える