每个实例的WCF

时间:2012-03-08 01:46:03

标签: 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] 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 个答案:

答案 0 :(得分:1)

您不必重置SomeService.Password的值,因为它不是静态的。你有没有看到相反的事情?


由于你正在使用InstanceContextMode.Single(我最初忽略了),你最好的办法是嘲笑在你的网络绑定单例中拥有单个实例的行为。我能想到的唯一方法就是拥有一个匹配服务合同的代理服务类,并根据特定条件(定义会话)将其调用委托给自定义实例。维护这种方式会很麻烦并且增加了不必要的抽象级别,但(至少在我的脑子里)它应该可以工作