Здравствуйте.
Есть библиотека для хранения значений программы в реестре. Данная библиотека используется как в WPF, так и в Web-сервисе.
Под WPF все отлично работает(записывает, считывает из/в "HKEY_LOCAL_MACHINE\SOFTWARE\MyApplicationName"). А вот под Web-сервисом(запуск под Visual Studio — больше никак не пробовал...), чтение данных из реестра происходит из "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node"! Да еще и Visual Studio отказывается прописывать манифест приложения под Web-сервисом, чтоб виртуализацию оменить....
Подскажите — как заставить библиотеку работать правильно под Web-сервисом?
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???:
Здравствуйте, Business, Вы писали:
B>Здравствуйте. B>Есть библиотека для хранения значений программы в реестре. Данная библиотека используется как в WPF, так и в Web-сервисе. B>Под WPF все отлично работает(записывает, считывает из/в "HKEY_LOCAL_MACHINE\SOFTWARE\MyApplicationName"). А вот под Web-сервисом(запуск под Visual Studio — больше никак не пробовал...), чтение данных из реестра происходит из "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node"! Да еще и Visual Studio отказывается прописывать манифест приложения под Web-сервисом, чтоб виртуализацию оменить.... B>Подскажите — как заставить библиотеку работать правильно под Web-сервисом?
Похоже, сервис у вас 32-битный. Или превратите его в 64-битный (как-зависит от сервиса) или используйте функцию RegDisableReflectionKey
Здравствуйте, vmpire, Вы писали:
V>Похоже, сервис у вас 32-битный. Или превратите его в 64-битный (как-зависит от сервиса) или используйте функцию RegDisableReflectionKey
А подробней(если это не шутка, конечно...)? Как превратить net-сервис в 64-битный? И... RegDisableReflectionKey — как я понял это через P/Invoke? или?....
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???:
Здравствуйте, Business, Вы писали:
V>>Похоже, сервис у вас 32-битный. Или превратите его в 64-битный (как-зависит от сервиса) или используйте функцию RegDisableReflectionKey
B>А подробней(если это не шутка, конечно...)? Как превратить net-сервис в 64-битный?
Нет, не шутка. Но как — зависит от сервиса, как я и сказал. Что за процесс служит сервисом?
B> И... RegDisableReflectionKey — как я понял это через P/Invoke? или?....
Да, через него.
Вообще, рекомендую прочитать тут: http://msdn.microsoft.com/en-us/library/ms724072%28VS.85%29.aspx и по ссылкам.
Здравствуйте, vmpire, Вы писали:
B>>Как превратить net-сервис в 64-битный? V>Что за процесс служит сервисом?
Создал ВЕБ-СЕРВИС в Visual Studio(как обычно = new Project и т.д.)...
Процесс показывает такой: ("WebDev.WebServer.EXE" "ASP.NET Development Server — Port 49328" Type="Managed").
Ну а когда на IIS разворачиваешь — там ("w3wp.exe" Type="T-SQL, Managed, x86").
Ну и факт в том, что и под Visual Studio и под IIS все "не правильно" работает.
B>> И... RegDisableReflectionKey — как я понял это через P/Invoke? или?.... V>Да, через него. V>Вообще, рекомендую прочитать тут: http://msdn.microsoft.com/en-us/library/ms724072%28VS.85%29.aspx и по ссылкам.
"Тут" — читал ничего толкового(практического) для себя не нашел...(не хочется P/Invoke и напрямую с COM..... — классы-то по работе с реестром вроде есть в FW3.5!, а получается — что их бестолково использовать! ) Написано — во FrameWork 4.0 будет добавлен функционал по явному выбору — "виртуализировать или нет!".
Кстати, может зависить от FrameWork-a? """Возможно""" у меня он 32-х битный(3.5).... Как посмотреть — не знаю...
Здравствуйте, Business, Вы писали:
B>>>Как превратить net-сервис в 64-битный? V>>Что за процесс служит сервисом?
B>Создал ВЕБ-СЕРВИС в Visual Studio(как обычно = new Project и т.д.)... B>Процесс показывает такой: ("WebDev.WebServer.EXE" "ASP.NET Development Server — Port 49328" Type="Managed").
Как рулить этим сервером — честно говоря, не знаю
B>Ну а когда на IIS разворачиваешь — там ("w3wp.exe" Type="T-SQL, Managed, x86").
А вот с этим проще: проверьте, что ASP.NET зарегистрирован из каталога Framework64. Если нет — перерегистрируйте, запустив сначала
Aspnet_regiis.exe /u из каталока 32-битного фреймворка, а затем Aspnet_regiis.exe /i из Framework64
B>Ну и факт в том, что и под Visual Studio и под IIS все "не правильно" работает.
B>>> И... RegDisableReflectionKey — как я понял это через P/Invoke? или?.... V>>Да, через него. V>>Вообще, рекомендую прочитать тут: http://msdn.microsoft.com/en-us/library/ms724072%28VS.85%29.aspx и по ссылкам. B>"Тут" — читал ничего толкового(практического) для себя не нашел...(не хочется P/Invoke и напрямую с COM.....
COM-то тут при чём? B>- классы-то по работе с реестром вроде есть в FW3.5!, а получается — что их бестолково использовать! ) Написано — во FrameWork 4.0 будет добавлен функционал по явному выбору — "виртуализировать или нет!".
Framefork читает из той части registry, из которой по умолчанию читает процесс,в котором он выполняется, в зависимости от типа (32 или 64). B>Кстати, может зависить от FrameWork-a? """Возможно""" у меня он 32-х битный(3.5).... Как посмотреть — не знаю...
На 64-битной машине .NET ставится в двух версиях сразу. Какая будет выполняться из IIS — зависит от настроек. Какая будет выбрана при обычном запуске приложения — зависит от типа CPU, выбранного при компиляции.
B>Нашел еще вот что:Как переключаться между 32-разрядные версии ASP.NET 1.1 и 64-разрядную версию ASP.NET 2.0 на 64-разрядной версии Windows. — здесь меня смущает слово "переключаться" — так и не понятно какие последствия переключения!(вопрос возникает сам собой — "И-и-и что будет?.... ")
Э... переключится
А ещё дизайнер reporting services могжет отвалится, он в 2005/2008 студии 32-битный (про 2010 не знаю).
Я думаю, Вам это не нужно, Вам как раз наоборот нужно запуститься в native-Режиме.
Здравствуйте, vmpire, Вы писали:
B>>Ну а когда на IIS разворачиваешь — там ("w3wp.exe" Type="T-SQL, Managed, x86"). V>проверьте, что ASP.NET зарегистрирован из каталога Framework64.
Как проверить? V>Если нет — перерегистрируйте, запустив сначала V>Aspnet_regiis.exe /u из каталока 32-битного фреймворка, а затем Aspnet_regiis.exe /i из Framework64
Aspnet_regiis.exe /u к сожалению выдал ошибку "была сделана попытка загрузить приложение, имеющее неверный формат"
Затем, я не знаю что я зделал — и перерегистрация прошла без ошибок — толку только НОЛЬ — как читала моя библиотека под веб-сервисом(под IIS) из Wow6432Node, так и читает от туда....
B>>не хочется P/Invoke и напрямую с COM.....
Т.к у меня с переводом типов плоховато из C++ в C#, а pinvoke.net не всегда ту, семантику предлагает, которую нужно. V>COM-то тут при чём?
Ну я имел ввиду Win Api...(для меня эти понятия, взором из мира C# — одинаковые)
Я думаю на WinApi писать! Спасибо за помощь!
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???:
Сам отвечаю — как я решил проблему с веб-сервисом:
Я развернул свой веб-сервис в IIS. И там выставил галку:..............
1) идем по пути: Диспетчер служб IIS\Пулы приложений\
2) выбираем пул приложений, который относится к нужному веб-сервису
3) на правой стороне окна "Действия" кликаем на ссылку "Дополнительные параметры"
4) в появившемся окошке выставляем в false значение параметра "Разрешены 32-разрядные приложения"
наслаждаемся правильной работой вашего сервиса!!!!!!!!
Кстати скажу — к веб сервису были подключены COM+ библиотеки(прям в Visual Studio = как оболочка Interop) — на удивление тоже все работает!
Еще раз спасибо vmpire — за беседу!
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???:
Здравствуйте, Business, Вы писали:
B>>>Ну а когда на IIS разворачиваешь — там ("w3wp.exe" Type="T-SQL, Managed, x86"). V>>проверьте, что ASP.NET зарегистрирован из каталога Framework64. B>Как проверить?
Зайдите в свойства веб-сайта, вкладка Home Directory кнопка Configuration, там application mapping. Смотрите на каталог, в котором сконфигурирован handler для aspx. Должен быть каталог Framework64, например D:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll
V>>Если нет — перерегистрируйте, запустив сначала V>>Aspnet_regiis.exe /u из каталока 32-битного фреймворка, а затем Aspnet_regiis.exe /i из Framework64 B>Aspnet_regiis.exe /u к сожалению выдал ошибку "была сделана попытка загрузить приложение, имеющее неверный формат" B>Затем, я не знаю что я зделал — и перерегистрация прошла без ошибок — толку только НОЛЬ — как читала моя библиотека под веб-сервисом(под IIS) из Wow6432Node, так и читает от туда....
А Вы Aspnet_regiis.exe /i точно запускали из каталога Framework64?
Здравствуйте, vmpire, Вы писали:
V>>>проверьте, что ASP.NET зарегистрирован из каталога Framework64. B>>Как проверить? V>Зайдите в свойства веб-сайта, вкладка Home Directory кнопка Configuration, там application mapping. Смотрите на каталог, в котором сконфигурирован handler для aspx. Должен быть каталог Framework64, например D:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll
Чет я не пойму — где отправная точка "Свойства веб-сайта" — в IIS? — нет там такого!(у меня Windows 7)
V>А Вы Aspnet_regiis.exe /i точно запускали из каталога Framework64?
точно!
"Производная функции" — со школы не пойму чё это и в какой момент нужно будет применить... :???: