2012-03-08 5 views
0

私はこのようなWCFサービスコードがあります。WCFインスタンス当たり

[ServiceContract] 
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class SomeService 
{ 
    public string Password { [OperationContract] get; [OperationContract] set; } 

    public void CheckPassword() 
    { 
     if (Password == null || Password != "password") 
      throw new FaultException("Invalid Password"); 
    } 

    [OperationContract] 
    public string SomeMethod() 
    { 
     this.CheckPassword(); 

     return "Some Data"; 
    } 
} 

をそしてクライアントのWindowsアプリケーションはこのようにそれを消費:私は値をリセットするにはどうすればよい

public class ClientClass 
{ 
    public ClientClass() 
    { 
     STASomeService.Value.SomeMethod(); 
    } 
} 
public class ClientClass 
{ 
    public ClientClass() 
    { 
     STASomeService.Value.set_Password("password"); 
    } 
} 

SomeServiceクラスがインスタンス化されるたびにSomeService.Passwordの?攻撃者が私のサービスメソッドにアクセスするのは望ましくありませんが、実際のクライアントがパスワードを設定すると、パスワードはすべてのサービスコールのSomeService.Passwordプロパティにとどまります。しかし、クライアントが必要とするため、インスタンスごとにPasswordの値を保持したい。

私のコードはC#、フレームワーク4、VS2010 Proでビルドされています。

助けてください。前もって感謝します。

答えて

1

SomeService.Passwordの値は静的でないため、リセットする必要はありません。あなたは何か反対のことを見ていますか?


あなたは(私はもともと見落とし)InstanceContextMode.Singleを使用しているので、あなたの最高の頼みの綱は、ネットワークバインドシングルトン内の個々のインスタンスを持つの挙動を模擬することが私の。これを容易にするために考えられる唯一の方法は、サービスの契約に一致するプロキシサービスクラスを用意し、特定の条件(セッションを定義する)に基づいてカスタムインスタンスにその呼び出しを委任することです。この方法を維持するのは面倒で、不要なレベルの抽象化を追加しますが、(少なくとも私の頭では)うまくいくはずです。

+0

お返事ありがとうございます。サービス参照としてそれを消費し、サービスの 'InstanceContextMode'が' Single'に設定され、値が変更されないためです。サービスのインスタンスごとに値が変更されないようにします。助けてください。 –

+1

質問を詳細(私は今削除されたコメント)から更新しました、うまくいけばあなたを助けるでしょう。 –

関連する問題