2012-03-08 173 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.Password每當SomeService類被實例化?我不希望攻擊者訪問我的服務方法,但是當實際客戶端設置密碼時,密碼會保留在每個服務調用的SomeService.Password屬性中。但我想保留每個實例的Password值,因爲客戶端需要這個值。

我的代碼是在C#中,框架4,內置VS2010 Pro。

請幫助。提前致謝。

回答

1

您不應該重置SomeService.Password的值,因爲它不是靜態的。你有沒有看到相反的東西?


由於您使用InstanceContextMode.Single(我原來忽略),你最好求助於我是嘲笑在你的網絡結合單個人情況的行爲。我能想到的唯一方法是促成這一點,就是擁有一個代理服務類,它與您的服務合同相匹配,並根據特定標準(可定義會話)將其調用委託給自定義實例。這樣做會很麻煩,並且增加了不必要的抽象層次,但是(至少在我的腦海中)它應該可以工作

+0

感謝您的回答。這是因爲我將它作爲服務引用使用,並且服務的InstanceContextMode設置爲Single,所以值不會改變。我希望該值不會更改每個服務實例。請幫忙。 – 2012-03-08 02:22:06

+1

更新了我的(現已刪除的評論)詳細信息的問題,希望它能幫助您。 – 2012-03-08 03:01:08