2

サーバーで実行されている WCF サービスと、 http://burcakcakiroglu.com/ ?p=2179で説明されているものと同様に、カスタム UserNamePasswordValidator に対して自分自身を認証した後にサービスを使用するクライアントがいくつかあります。

サービスは、次のプロパティで実装されます。

[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

サーバー ホストは次のようにインスタンス化されます。

host = new ServiceHost(typeof(AsistenciaService));
host.Open();

現在、クライアントが最初に認証した後は、再度認証する必要はありません (クライアント アプリケーションを閉じた後を除く)。

サーバー プロセスでは、すべてのクライアント接続を -kill- したいので、サービスを利用する前に再度認証する必要があります。これは可能ですか?

編集: WCF サービスは IIS サーバーでホストされます。

4

1 に答える 1

0

あなたの問題は認証のようです。これを実現する [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple)]には、サービスの実装と [ServiceContract(SessionMode=SessionMode.Required)]サービス インターフェイスで使用できます。このようにして、InstanceContext新しいクライアント セッションごとに新しい (したがってサービス オブジェクト) が作成され、そのセッションの存続期間中維持されます (これには、セッションをサポートするバインディングが必要です)。詳細については、このコード プロジェクトの記事セクションを参照してください。

サービス オブジェクトの有効InstanceContextMode.PerSession期間は、クライアント チャネルの有効期間とは無関係であるため、新しい通信セッションが確立され、その後破棄されるたびに、新しいサービス オブジェクトが作成されます。各クライアント チャネルは専用のサービス インスタンスを取得し、同じセッション内の後続の呼び出しは同じ Service オブジェクトによって処理されます。これはインスタンス化コンテキストのデフォルト値です。そして、これは を除くすべてのバインディングで機能しますbasicHttpBinding

あなたのサービスは(現時点では)シングルトンであり、永久に存続し、ホストがシャットダウンしたときにのみ破棄されホストが作成されたときに一度だけ作成されます。シングルトンを使用する場合、クライアントはシングルトン インスタンスとのセッションを維持したり、トランスポート レベルのセッションをサポートするバインディングを使用したりする必要はありません。クライアントが消費するコントラクトにセッションがある場合、プロキシを閉じることにより、クライアントはセッションのみを終了し、シングルトン インスタンスは終了しません。さらに、セッションが期限切れになることはありません。

于 2015-02-19T15:13:12.747 に答える