0

デュプレックスサービスが必要です。ユーザーが以前にユーザー名とパスワードを正しく送信した場合にのみサービスのメソッドを使用できるようにするため、クライアントがユーザー名とパスワードを正しく入力したかどうかを知りたいです。

デュプレックスの場合、この投稿では、コール間のコールバックを格納するための静的リストを使用して、コールごとにデュプレックスサービスを使用できることを知っています。しかし、呼び出しごとのメソッドを使用してユーザー制御を行う方法に疑問があります。

私はこの場合考えています:

1.-ユーザーがlogin()メソッドを呼び出し、ユーザー名とパスワードを送信します。この場合は正しいです。

2.-これで、ユーザーはサービスの残りのメソッドを呼び出すことができます。たとえば、method1()。ここに質問があります。呼び出しごとにどのようになり、各メソッド呼び出しで新しいインスタンスが作成されますが、同じクライアントから、各コールバックは異なるコードを持っているか、同じですか?同じ場合、クライアントが別のコールバックを持っているとき、それがアプリケーションを再起動するとき?

コールバックがすべての呼び出しで異なる場合、クライアントが以前にユーザー名とパスワードを送信したかどうかをどのように知ることができますか?ログとパスワードをメソッドパラメータとして送信する必要がありますか?

コールバックが同じである場合、クライアントが接続を閉じて静的リストからコールバックを削除するタイミングを知ることはできますか?おそらくこれは接続制御でしょうか?

ありがとう。

編集:いくつかの調査を行ったところ、クライアントのIDであるコールバックは、メソッドの呼び出しごとに同じであることがわかりました。そのため、必要な情報(ユーザー名など)を保存するクラスを作成することができます。このユーザーは、このコールバックにログインとパスワードを入力しました...など。

4

1 に答える 1

0

PerCall を使用する場合でも、SessionMode = SessionMode.Required. IsInitiating = true次に、操作がセッションを開始することをwcfに伝えるログインメソッド操作コントラクト属性を単純に装飾できます 。他のすべての操作は に設定する必要があります IsInitiating = false。login を呼び出す前にセッションを開始しないメソッドをクライアントが呼び出すと、例外がスローされます。

いえ

 [ServiceContract(Namespace = "Services", SessionMode = SessionMode.Required, CallbackContract =          typeof(SVIMyCallback))]

 [OperationContract(Name = "login", IsInitiating = true)]
 [OperationContract(Name = "doSomething", IsInitiating = false)]
于 2012-04-17T07:11:40.653 に答える