|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
Создал по примеру 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(); } } ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2012, 11:06 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
RodeRebel, можно вопрос, зачем? У вас и так есть сессия, если вы ее уже открыли для пользователя, зачем еще поверять, есть ли он списке сессий? Если необходимо чтобы он вызвал метод login первым, пометьте остальные IsInitiating = false (по-умолчанию помоему true) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2012, 16:02 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
Хотелось просто иметь какое-нибудь средство типа хидера, метаданных и т.п. чтобы самому распознавать сессий, прежде на стороне сервиса имея список класса пользователей. Или даже забудем про сессии, постараюсь описать что я хотел: 1) Некий метод должен проверяя кое-какие клиентские данные (пр: логин, пароль) для него создает класс и держит его на своем списке, при этом клиенту возвращает уникальный код. 2) Клиент получивший уникальный код при обращении другим методам прикрепляет его запросу не как параметр, а как хидер, или кредентиал и т.п. 3) Сервис при выполнении каких-либо методов прочитает этот код, распознает клиента и дальше решает как быть. Я хотел SessionId клиента использовать в качестве такого уникального кода чтобы его распознать любой момент. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 09:41 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
RobeRebel, Ладно, изобретайте лисапеды ( ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 09:46 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
Ну ладно, раз сервис не может различать клиентов что мне делать, ведь то, что сервис дает на разные инстанции клиентов одинаковый uuid меня не устраивает. Мне надо вести список сложным классом пользователей на сервисе. список клиентов сервиса: 1) uuid:9253e35f-e38a-4dad-9dbf-615eb4d859dd;id=2 (с машина А) 2) uuid:9253e35f-e38a-4dad-9dbf-615eb4d859dd;id=5 (с машина Б) кстати, как можно хранить данные определенной сессии на сервисе? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 10:14 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
VRD, в полях класса не? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 10:16 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
VRD, авторНу ладно, раз сервис не может различать клиентов Всмысле не может, при использовании сессий один клиент в сессию другого не попадет) Если вы и RodeRebel одно лицо пожалуйста, поясните, зачем вам список сессий для проверки клиента? Может лучше просто покурить аутентификацию, чтобы сессию не мог создать кто угодно? Чем городить какой-то ну совсем неясный велосипед. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 10:23 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
И кстати, выкеньте Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
и покурите UserNamePasswordValidator ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 10:25 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
выкиньте* ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 10:29 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
LelouchVRD, авторНу ладно, раз сервис не может различать клиентов Всмысле не может, при использовании сессий один клиент в сессию другого не попадет) Если вы и RodeRebel одно лицо пожалуйста, поясните, зачем вам список сессий для проверки клиента? Может лучше просто покурить аутентификацию, чтобы сессию не мог создать кто угодно? Чем городить какой-то ну совсем неясный велосипед. спасибо Lelouch, я попробую. Да, кстати, RodeRebel и VRD они и есть я, не знаю как-то так получилось у меня двойная регистрация, а еще на разных браузерах разные в куки сидят. Я должен признавать, я еще только начинаю изучать и создать первое приложение, пинайте не сильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 10:59 |
|
WCF получение сервисом SessionId клиента
|
|||
---|---|---|---|
#18+
Кстати, тут еще была детская ошибка везде использовать конструкцию Using(){} не приемлимую для сеансового приложения. Мне просто не нравится сбой приложении из-за таймаута сеанса. Есть простые примерчики отправки ClientCredentials или Header и получение/прочтение сервисом? Я пока не смог доделать/внедрить тольком кусков подобных операции. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 14:19 |
|
|
start [/forum/topic.php?fid=19&msg=37873449&tid=1397222]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 169ms |
0 / 0 |