2012-03-08 2 views
0

У меня есть WCF службы кода:WCF Per Instance

[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.Password при создании класса SomeService? Я не хочу, чтобы злоумышленник обращался к моим методам обслуживания, но когда фактический клиент установил пароль, пароли остаются в свойстве SomeService.Password в каждом сервисном вызове. Но я хочу сохранить значение Password для каждого экземпляра, потому что клиенту это необходимо.

Мой код в C#, каркас 4, встроенный VS2010 Pro.

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

ответ

1

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


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

+0

Спасибо за ответ. Это потому, что я использую его как ссылку на службу, а «InstanceContextMode» для службы устанавливается в «Single», поэтому значение не изменится. Я хочу, чтобы значение не менялось на экземпляр службы. Пожалуйста помоги. –

+1

Обновленный вопрос с деталями из моего (теперь удалённого комментария), надеюсь, это поможет вам. –

Смежные вопросы