Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: ".Net";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: ".Net";
Текущий архив: 2008.07.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.019 c
15-1213197747
Limited
2008-06-11 19:22
2008.07.27
Фича встраиваемая в Delphi IDE для форматирования комментариев


4-1193296400
Василий К.
2007-10-25 11:13
2008.07.27
GWL_EXSTYLE в windows XP


15-1212936412
ganda
2008-06-08 18:46
2008.07.27
postgresql + дополнительная информация


2-1214475991
Vit
2008-06-26 14:26
2008.07.27
Компиляция и билд


15-1212446696
alex-drob
2008-06-03 02:44
2008.07.27
Где написать код, чтобы он выполнился после загрузки программы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский