| Всем доброго времени суток! Суть вопроса вот в чем. Существует Web- сервис, взаимодействующий с клиентом по soap протоколу. Библиотека сервиса Serv.dll вызывает библиотеку Funcs.dll которая вызывает еще несколько библиотек Lib1,Lib2,... libn. эти библиотеки пользуются некоторой общей областью памяти заложенной в SharedMem.bpl. Когда эти библиотеки вызываются из Win приложения (выполняющего аналогичный функционал, что и сервис, но установленного на локальной машине) то все хорошо - мы запустили 10 раз exe-шку у нас отвелось 10 областей в памяти, которые друг друга не видят и SharedMemory прекрасно выполняет свою функцию некого посредника между работающими библиотеками, т.к для такой SharedMemory при работе существует всего один пользователь.. В случае же сервиса все обстоит иначе - библиотека Serv.dll одна и к ней обращается куча пользователей. И когда несколько пользователей работают одновременно то получается они работают с одной и той же областью памяти, т.е если под User1 метод из Lib1 поместил что-то в SharedMemory то user2 каким-либо другим методом из любой другой библиотеки может запросто это все затереть... Вот.. надеюсь суть проблеммы изложил не очень коряво:) А вопрос собственно вот в чем нельзя ли сделать так чтобы при каждой загрузке Funcs.dll она загружалась в отдельную область памяти и используя sharedMem.bpl и другие библиотеки ничего бы не знала о том, что другой пользователь так же загрузил эту библиотеку и друг другу бы они не мешали... |