powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF получение сервисом SessionId клиента
11 сообщений из 11, страница 1 из 1
WCF получение сервисом SessionId клиента
    #37872792
RodeRebel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Создал по примеру WCF приложение, где сеансовый сервис на Winforms по net.tcp . При обращении к методу хочу определить на стороне сервиса SessionId клиента , чтобы определить, разрешить ему или нет. Вижу, что клиенты имеют свои SessionId, но сервис показывает для всех клиентов одинаковый SessionId с увеличивающим порядковым номером.

Вот айди клиента 1
uuid:778314a7-8ed7-417b-b061-b1baf5928766;id=2 (id увеличивается каждый раз)

Вот айди клиента 2
uuid:b7fd9205-a0f8-4ce7-aa1f-5afa6e4ffa60;id=3;

А вот что показывает список клиентов сервиса: ((id тут тоже увеличивается с каждым обращением))
1) uuid:9253e35f-e38a-4dad-9dbf-615eb4d859dd;id=2
2) uuid:9253e35f-e38a-4dad-9dbf-615eb4d859dd;id=5

Как надо сделать, чтобы сервис увидел SessionId клиентов?

Вот собственно код:
Куски кода на сервере
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class TcpService1 : ITcpService1
{
public static List<string> authenticated = new List<string>();
public void login(string username, string password)
{
// if (username == "correctUsername" || password =="correctPassword")
{ // user has given correct username/pasword
string currentSessionId = OperationContext.Current.SessionId;
authenticated.Add(currentSessionId);
}
}

public string getdata()
{
string currentSessionId = OperationContext.Current.SessionId;
if (authenticated.Contains(currentSessionId))
{
return "these are data: " + currentSessionId;
}
return String.Empty;
}
}
Куски кода на клиенте:
private void btCheckSessionID_Click(object sender, EventArgs e)
{
using (ServiceRef3Tcp.TcpService1Client cln = new ServiceRef3Tcp.TcpService1Client())
{
cln.Open();
string sg=cln.getdata();
string sessionID = cln.InnerChannel.SessionId;
ShowMess("ClientSessID:" + sessionID + "; Getdata result: " + sg);
cln.Close();
}

}
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37873449
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RodeRebel,

можно вопрос, зачем? У вас и так есть сессия, если вы ее уже открыли для пользователя, зачем еще поверять, есть ли он списке сессий? Если необходимо чтобы он вызвал метод login первым, пометьте остальные IsInitiating = false (по-умолчанию помоему true)
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874302
RodeRebel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось просто иметь какое-нибудь средство типа хидера, метаданных и т.п. чтобы самому распознавать сессий, прежде на стороне сервиса имея список класса пользователей.
Или даже забудем про сессии, постараюсь описать что я хотел:
1) Некий метод должен проверяя кое-какие клиентские данные (пр: логин, пароль) для него создает класс и держит его на своем списке, при этом клиенту возвращает уникальный код.
2) Клиент получивший уникальный код при обращении другим методам прикрепляет его запросу не как параметр, а как хидер, или кредентиал и т.п.
3) Сервис при выполнении каких-либо методов прочитает этот код, распознает клиента и дальше решает как быть.
Я хотел SessionId клиента использовать в качестве такого уникального кода чтобы его распознать любой момент.
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874312
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RobeRebel,

Ладно, изобретайте лисапеды (
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874365
VRD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRD
Гость
Ну ладно, раз сервис не может различать клиентов что мне делать, ведь то, что сервис дает на разные инстанции клиентов одинаковый uuid меня не устраивает. Мне надо вести список сложным классом пользователей на сервисе.
список клиентов сервиса:
1) uuid:9253e35f-e38a-4dad-9dbf-615eb4d859dd;id=2 (с машина А)
2) uuid:9253e35f-e38a-4dad-9dbf-615eb4d859dd;id=5 (с машина Б)
кстати, как можно хранить данные определенной сессии на сервисе?
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874367
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRD,

в полях класса не?
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874385
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VRD,

авторНу ладно, раз сервис не может различать клиентов
Всмысле не может, при использовании сессий один клиент в сессию другого не попадет)
Если вы и RodeRebel одно лицо пожалуйста, поясните, зачем вам список сессий для проверки клиента? Может лучше просто покурить аутентификацию, чтобы сессию не мог создать кто угодно? Чем городить какой-то ну совсем неясный велосипед.
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874392
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати, выкеньте
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public void login(string username, string password)
 {
 // if (username == "correctUsername" || password =="correctPassword")
 { // user has given correct username/pasword 
 string currentSessionId = OperationContext.Current.SessionId;
 authenticated.Add(currentSessionId);
 }
 }


и покурите UserNamePasswordValidator
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874399
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выкиньте*
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874443
VRD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRD
Гость
LelouchVRD,

авторНу ладно, раз сервис не может различать клиентов
Всмысле не может, при использовании сессий один клиент в сессию другого не попадет)
Если вы и RodeRebel одно лицо пожалуйста, поясните, зачем вам список сессий для проверки клиента? Может лучше просто покурить аутентификацию, чтобы сессию не мог создать кто угодно? Чем городить какой-то ну совсем неясный велосипед.
спасибо Lelouch, я попробую.
Да, кстати, RodeRebel и VRD они и есть я, не знаю как-то так получилось у меня двойная регистрация, а еще на разных браузерах разные в куки сидят.
Я должен признавать, я еще только начинаю изучать и создать первое приложение, пинайте не сильно.
...
Рейтинг: 0 / 0
WCF получение сервисом SessionId клиента
    #37874924
VRD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VRD
Гость
Кстати, тут еще была детская ошибка везде использовать конструкцию Using(){} не приемлимую для сеансового приложения.

Мне просто не нравится сбой приложении из-за таймаута сеанса. Есть простые примерчики отправки ClientCredentials или Header и получение/прочтение сервисом? Я пока не смог доделать/внедрить тольком кусков подобных операции.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF получение сервисом SessionId клиента
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]