![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Ser2005 |
|
|||
|
Unregistered |
Прошу подсказать.
Имеем ряд сервисов, которые используют (вернее мы хотим, чтобы использовали) static член одного класса (сборка - dll-модуль помещен в GAC). При работе с различными методами одного сервиса все прекрасно, в статике мы имеем то, что положили. Но при обращении к нему из другого сервиса этот статик-член оказывается пуст. Как с этим можно бороться? Каким бубном звякнуть (может быть своим о стенку)? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Статик-поле сохраняется только в рамках одного AppDomain.
Если нужно взаимодействовать между процессами, необходим другой вариант. -------------------- ![]() |
|||
|
||||
| Ser2005 |
|
|||
|
Unregistered |
to mr.DUDA
Т.е. при использовании сервисов работа идет в разных доменах? К сожалению, сервисы для нас совсем новая область. Не могли бы вы хоть немного "подтолкнуть" в нужном направлении. Нам необходимо имееть некую общую область памяти, к которой бы имели доступ работающие сервисы. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Уточните, пжлст, Windows-сервисы или ASP.NET Web Services ? -------------------- ![]() |
|||
|
||||
| Ser2005 |
|
|||
|
Unregistered |
ASP.NET Web Services
|
|||
|
||||
| mr.DUDA |
|
||||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
В таком случае, что-то работает не так, потому что все веб-сервисы работают в рамках одного процесса (если конечно администратор не настроил IIS на использование нескольких процессов).
Вот пример, он реально показывает, что оба веб-сервиса работают с одной копией статической переменной: GlobalClass.cs
Service1.asmx.cs
Service2.asmx.cs
При обращении через браузер, методы Get и Set обоих веб-сервисов возвращают и устанавливают текущее значение GlobalClass.GlobalVar -------------------- ![]() |
||||||
|
|||||||
| Ser2005 |
|
|||
|
Unregistered |
Попытался воспроизвести ваш пример. Результат такой, как был у нас ранее. Т.е. каждый из этих двух сервисов работает со своей копией GlobalClass и возвращают свой, отличный от другого, результат.
IIS с момента установки не переконфигурировался. ОС - WinXP. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Странно, т.к. у меня точно такая же конфигурация и всё работает, пример рабочий.
-------------------- ![]() |
|||
|
||||
| SergKO |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 14.3.2005 Репутация: нет Всего: 20 |
Какая у вас версия IIS? У нас - 5.1.
Не может быть проблема в этом: Группировка приложений в пул в службах IIS версии 6.0 |
|||
|
||||
| SergKO |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 14.3.2005 Репутация: нет Всего: 20 |
Прошу прощения Ser2005 = SergKO.
Совсем забыл, что регистрировался на форуме. Предыдущее сообщение адресовано mr.DUDA Если я правильно понял, то IIS 5.1 запускает сервисы в разных процессах. |
|||
|
||||
| arilou |
|
||||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
На скриншоте показано, что для виртуальной директории EP выставлен Application Protection - Medium. Смотрим IIS Help:
Читаем и понимаем, что веб-сервисы выполняются в рамках процесса IIS. Это означает, что внутри процесса IIS создается .NET host, в котором выполняется код (вероятно, через aspnet_isapi.dll). Далее. ASP.NET использует такое понятие .NET fx как Application Domain. AppDomain - это изолированный контекст выполнения внутри одного процесса. Каждое приложение в ASP.NET выполняется в своем AppDomain. Это нужно для того, чтобы их изолировать друг от друга. Веб-сервис входит в состав ASP.NET приложения, соответственно, если два веб-сервиса находятся в одном приложении, то они работают в одном AppDomain и имееют доступ к общим статическим переменным. Если же сервисы находятся в разных приложениях (читай, разных проектах в VS.NET), то они будут работать в разных AppDomain'ах, и, как сказал mr.DUDA, у них будет своя копия набора статических переменных. Любое взаимодействие между двумя разными контекстами выполнения должно использовать тот или иной механизм, например, Remoting. Я бы предложил вместо статических переменных использовать Remoting объект с синхронизированным доступом. Дело в том, что нельзя забывать, что веб-сервисы (как и веб-приложения) работают в многопоточной среде, и поэтому использование статических переменных должно быть мотивировано, а доступ к ним - синхронизирован. Надеюсь, что помог. Это сообщение отредактировал(а) arilou - 9.6.2005, 14:44 Присоединённый файл ( Кол-во скачиваний: 8 )
AppConfig.GIF 23,54 Kb |
||||
|
|||||
| SergKO |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 14.3.2005 Репутация: нет Всего: 20 |
to arilou
Огромное спасибо за разъяснение. К выводу использовать Remoting мы уже пришли сами, но эти выводы были сделаны на основе наших предположений и догадок, т.е. ПОКА без достаточного понимания. to mr.DUDA Спасибо за участие и помощь. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |