2012-04-03 8 views
1

私は、次の今日PerCall、SessionMode.NotAllowed、コールバック付きのWCF?

  • NETTCPBinding(WAS)
  • IIS7でホスト
  • PerSessionサービス
  • を使用しているサービスが
  • をSessionMode.Required持っこんにちは、

    コールバック

  • Singelton on serすべてのクライアントは、

は、私が今PerCallインスタンス化にこれを変更する必要があると言うとをSessionMode.NotAllowedコンテキスト保持バイスは、上記の私のキーfunctionalitysのいずれかを失うことなく、このかのうでしょうか?

私は、TCPセッションバインドのprotocollであり、これは私が魔女として、高速TCP(代わりにバイナリエンコーダのXML 1.0エンコーダ)などではないHTTPバインディングを使用する必要がありますことを意味していることを見てきました。しかし、これはコールバックの例をサポートするかどうかまだ分かりません。

答えて

1

PerCallSessionMode.NotAllowedは、あなたの現在の設定よりも制限/「少ない」固有のものです。基本的な意味を理解する限り、これらの設定に簡単に移行することができます。つまり、サービスインスタンス内のコール間に状態がなくなることです。

前記、私はあなたが「すべてのクライアントコンテキストを保持しているサービスでシングルトン」によって何を意味するか理解していません。あなたは精緻化できますか?私は、あなたがサービス実装のシングルトン(静的フィールド?)内にあなたの保持状態を意味すると思います。 PerCallインスタンスからアクセスすると問題ありません。その状態でロックを提供する必要があることを覚えておいてください。これは、たとえば、コールバックのリストをどのように保持できるかです。

また、セッション中のTCPの理解は正しくありません。 HTTPはTCPの上に構築されたプロトコルであることを覚えておいてください。はいTCPソケットは、一定時間(接続したまま)再接続できるように接続したままですが、それらの上に送信するメッセージは互いに完全に無関係です。あなたがNetTcpBindingに固執すれば、うまくいくでしょう。同様に、技術的にはHTTP転送でセッションを実行できます。また、HTTPベースのトランスポートに切り替えた場合、にはがありません。 HTTPトランスポートを介してバイナリコンテンツを送信することができます。カスタムバインドを設定するだけで、次のようになります。

<bindings> 
    <customBinding> 
     <binding name="MyBinaryOverHttpBinding"> 
      <binaryMessageEncoding /> 
      <httpTransport /> 
     </binding> 
    </customBinding> 
</bindings> 
+0

どのようにしてnetTCPでセッションレスで実行できますか? – Banshee

+0

「セッションレス」と言えば、どのレベルの話をしていますか? PerCallモードに変更するだけで、論理WCFセッションはもう存在しません。つまり、あなたのTCP接続はサーバとのセッションを維持して、可能な限り効率的に複数のコールを入力すると言いました。これらの設定は、デフォルト値が10のMaxConnectionsプロパティを使用してNetTcpBinding自体の設定によって制御されます。 –

+0

ただし、サービスインタフェースでは、SessionMode.NotAllowedを設定するとnetTCPが機能しないと表示されますか? – Banshee

関連する問題