C# 每个实例的WCF

C# 每个实例的WCF,c#,winforms,wcf,web-services,.net-4.0,C#,Winforms,Wcf,Web Services,.net 4.0,我的WCF服务代码如下: [ServiceContract] [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)] public class SomeService { public string Password { [OperationContract] get; [OperationContract] s

我的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";
    }
}
public class ClientClass
{
    public ClientClass()
    {
        STASomeService.Value.SomeMethod();
    }
}
public class ClientClass
{
    public ClientClass()
    {
        STASomeService.Value.set_Password("password");
    }
}
客户端windows应用程序使用它的方式如下:

[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";
    }
}
public class ClientClass
{
    public ClientClass()
    {
        STASomeService.Value.SomeMethod();
    }
}
public class ClientClass
{
    public ClientClass()
    {
        STASomeService.Value.set_Password("password");
    }
}
每当实例化
SomeService
类时,如何重置
SomeService.Password
的值?
我不希望攻击者访问我的服务方法,但当实际客户端设置密码时,密码在每次服务调用中都保留在
SomeService.Password
属性中。但是我想保留每个实例的
密码
值,因为客户端需要它

我的代码是在VS2010 Pro中构建的C#框架4中


请帮忙。提前感谢。

您不必重置
SomeService.Password的值,因为它不是静态的。你看到的是相反的东西吗



由于您使用的是
InstanceContextMode.Single
(我最初忽略了这一点),因此最好的办法是模拟在网络绑定的singleton中有单个实例的行为。我能想到的促进这一点的唯一方法是拥有一个代理服务类,该类与您的服务的契约相匹配,并根据特定条件(将定义会话)将其调用委托给自定义实例。保持这种方式会很麻烦,并且会增加不必要的抽象级别,但是(至少在我看来)它应该可以工作

谢谢你的回答。这是因为我将其作为服务引用使用,并且服务的
InstanceContextMode
设置为
Single
,因此该值不会更改。我希望每个服务实例的值都不会更改。请帮忙。更新了我的问题细节(现在删除了评论),希望它能帮到你。