WCF за экземпляр - PullRequest
       3

WCF за экземпляр

0 голосов
/ 08 марта 2012

У меня есть служба 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 #, framework 4, сборка в VS2010 Pro.

Пожалуйста, помогите.Заранее спасибо.

1 Ответ

1 голос
/ 08 марта 2012

Вам не нужно сбрасывать значение SomeService.Password, потому что оно не статично. Вы видите что-то наоборот?


Поскольку вы используете InstanceContextMode.Single (который я изначально упустил из виду), вы можете высмеивать поведение отдельных экземпляров в синглтоне, привязанном к вашей сети. Единственный способ облегчить это - создать прокси-класс, который соответствует контрактам вашей службы и делегирует свои вызовы пользовательским экземплярам на основе определенных критериев (которые определяют сеанс). Было бы обременительно поддерживать этот путь и добавлять ненужный уровень абстракции, но (по крайней мере, в моей голове) он должен работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...