Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.27;
Скачать: CL | DM;

Вниз

Web Service, DCOM сервер и многия клиенты   Найти похожие ветки 

 
Skyle ©   (2005-07-06 07:03) [0]

Есть такая задача. Имеется унаследованный сервер DCOM. Нужно написать Web Service, который будет шлюзовать запросы клиентов к этому самому серверу. Клиенты написаны на C#.

Создал interop, вкрутил в сервис, создал пару тестовых WebMethod"ов, из которых он обращается, всё вроде в ажуре.

Проблем несколько.
1. Аутентификация.
Пробовал решить через строку
<identity impersonate="true" userName="DOMAIN\USER" password="superpass"/> в web.config этого WebServicer"а. Вроде бы работает, но почему-то не всегда.
Я правильно понимаю, что под указанной учётной записью будет исполняться мой WebService и обращение к DCOM серверу будет именно под этой учётной записью (т.е. ей нужно раздать достаточные права в dcomcnfg на машине с DCOM сервером)?

2. Сохранение коннекта.
Видимо по умолчанию WebService находится в stateless mode, т.е. не держит сессии (cookies клиенты принимать умеют и это у них разрешено). Поэтому при каждом вызове каждого метода создаётся коннект к серверу (новый экземпляр). Видимо это новый экземпляр WebService"а. Пробовал создавать экземпляр DCOM сервера и хранить его в объекте Application. Работает, но решение видится очень кривым.
Вопрос в том, как заставить сервис держать сессии.

Есть и ещё вопросы, но это основное...

P.S. WebService пока написан в VS .NET 2003, но возможно будет написан на D7. Думаю ответы на эти вопросы одинаковы в обоих случаях.

Интересуют либо прямые ответы, либо ссылки на соответствующие доки либо просто накидать умных слов, чтобы я сам поискал...


 
iZEN ©   (2005-07-06 08:44) [1]

stateless - это природа WebServices.


 
Polevi ©   (2005-07-06 09:25) [2]

если DCOM сервер statefull придется тебе держать ссылку, ничего не поделаешь


 
Skyle ©   (2005-07-06 09:45) [3]

> stateless - это природа WebServices.
Т.е. никак его не заставить чтоли?
А как насчёт [WebMethod(EnableSession=true)]?
Насколько я понял, это именно включение сессий (т.е. раздаются cookies, объект Session живёт и может хранить данные между соединениями), но вот у меня это не заработало.


> [2] Polevi ©   (06.07.05 09:25)
> если DCOM сервер statefull придется тебе держать ссылку,
> ничего не поделаешь

Где держать-то?
Глобально, как я и писал (одна на всех в Application) или всё-таки умудриться запустить сессии?

Можно попробовать в Application сделать какой-нибудь пул, например имя объекта - уникальный гуид логической сессии клиента.
Если не запущу сессии, видимо так и придётся работать...:(

И ещё вопрос...
Допустим, у меня на каждое обращение создаётся экземпляр DCOM сервера со всеми вытекающими (коннект и прочее). Как эти коннекты отрубать?
Казалось бы достаточно просто уничтожить объект в сервисе, но не тут то было.

Насколько я понял привычным образом аля Excel.Quit; Excel := UnAssigned; тут не поступишь. Приходится отдаваться на милость GC? Или всё-таки есть способы его погасить руками?

В общем, чего-то я здесь простого не догоняю видимо...


 
Игорь Шевченко ©   (2005-07-06 09:55) [4]


> Видимо по умолчанию WebService находится в stateless mode


А в webconfig посмотреть в сторону параметра sessionState не поможет ?


 
Polevi ©   (2005-07-06 10:01) [5]

честно говоря могу ощибаться, но EnableSession это когда объект Session сериализуется и передается при каждом request-response
тебе же требуется хранить в памяти сервера двоичный объект
вариант с пулом вполне нормальный
насчет lifetime можешь копнуть в сторону спонсоров


 
Skyle ©   (2005-07-06 10:51) [6]

> насчет lifetime можешь копнуть в сторону спонсоров

А что за спонсоры? Как в оригинале называется?


 
Skyle ©   (2005-07-06 10:52) [7]


> [4] Игорь Шевченко ©   (06.07.05 09:55)
> > Видимо по умолчанию WebService находится в stateless mode
> А в webconfig посмотреть в сторону параметра sessionState
> не поможет ?

Посмотрел, написано, что сессии включены (cookieless = FALSE)...


 
Игорь Шевченко ©   (2005-07-06 11:54) [8]


> А что за спонсоры? Как в оригинале называется?


Так и называются


 
Polevi ©   (2005-07-06 11:55) [9]

http://msdn.microsoft.com/msdnmag/issues/03/12/leasemanager/default.aspx?fig=true#fig7


 
Skyle ©   (2005-07-06 14:23) [10]

Всем спасибо, буду делать пул.



Страницы: 1 вся ветка

Текущий архив: 2008.07.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
15-1213103553
oxffff
2008-06-10 17:12
2008.07.27
Среди наших кто-нибудь балуется разработкой компилятора?


2-1214450709
Олег
2008-06-26 07:25
2008.07.27
Удаление дубликатов в DBF


15-1212834620
Kostafey
2008-06-07 14:30
2008.07.27
С днем рождения ! 7 июня


3-1202974636
abhtr
2008-02-14 10:37
2008.07.27
Можно ли изменить название поля в таблице Paradox


15-1213076173
Term
2008-06-10 09:36
2008.07.27
Делфи и 64х разрядная архитектура